Pregunta

Así que estoy buscando en la escritura de algunas extensiones personalizadas MVC y el primero que estoy tratando de hacer frente a una FormattedTextBox cosas asa como la moneda, fechas y horas. Tengo la prestación de que funcione a la perfección, formatearlo, se trabaja con tipos fuertes y todo, todo de oro. Sin embargo, el problema Ahora estoy corriendo en es la limpieza de la materia con formato cuando la página la parte posterior de los datos.

Tomemos, por ejemplo, un formato de moneda. Vamos uso de dólares para estos ejemplos. Cuando un objeto tiene una propiedad como un decimal, el valor sería 79.95. Su vista de edición sería algo como:

<%= Html.FormattedTextBox(model => Model.Person.HourlyWage, "{0:C}") %>

Esto es todo bien y bueno para la solicitud GET, sino en la POST, el valor va a ser $79.95, que cuando se asigna a ese decimal, se pone infeliz muy rápidamente y termina empujando un 0 en ese país.

Así que mi pregunta es, ¿cómo consigo código en algún lugar de trabajo se trabaja con ese valor antes de la MVC Framework va y comienza a empujar de nuevo en mi modelo de vista? Prefiero esto sea del lado del servidor que hacerlo del lado del cliente.

Gracias !!

¿Fue útil?

Solución

Una solución sería escribir una personalizada modelo ligante que será capaz de convertir $79.95 se unen a un campo decimal en su modelo. Otra solución es hacerlo en el lado del cliente. En un controlador de form.submit jQuery podría modificar los valores de los campos de entrada que se publican.

Otros consejos

Se puede utilizar costumbre Modelo aglutinantes para empujar los datos publicados en un objeto.

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(
    [ModelBinder(typeof(YourModelBinderAttribute))]YourClass obj)
{
  // your code here

  return View();
}

public class MessageModelBinderAttribute : IModelBinder
{
    #region IModelBinder Members

    public object BindModel(
        ControllerContext controllerContext, 
        ModelBindingContext bindingContext)
    {
        YourClass obj = new YourClass();

        ValueProviderResult result;
        if (bindingContext.ValueProvider.TryGetValue(
            "YourPostedInputName", out result))
        {
            obj.Price = result.AttemptedValue;
        }

        return message;
    }

    #endregion
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top