2011-08-09 8 views
8

Estoy desarrollando un sitio en ASP.NET MVC 3.Analizar decimal en vista del modelo

Propiedad

[DisplayName("Cost"), DisplayFormat(DataFormatString = "{0:F2}", ApplyFormatInEditMode = true)] 
public decimal Cost { get; set; } 

Ver

@Html.EditorFor(x => x.Cost) 

, la vista hace algún Costo 1000,00 (por ejemplo). El problema es que la validación exige un punto en lugar de una coma. ¿Cómo puedo generar 1000.00 en vez de 1000.00? ¿O invertir la validación para aceptar la coma en lugar de un punto?

Editar. Establecí la globalización en mi web.config a sv-SE (Suecia).

Respuesta

10

que necesitará para escribir una Carpeta de modelo personalizada para hacer esto.

/// <summary> 
/// http://haacked.com/archive/2011/03/19/fixing-binding-to-decimals.aspx 
/// </summary> 
public class DecimalModelBinder : IModelBinder 
{ 
    public object BindModel(ControllerContext controllerContext, 
     ModelBindingContext bindingContext) 
    { 
     ValueProviderResult valueResult = bindingContext.ValueProvider 
      .GetValue(bindingContext.ModelName); 
     ModelState modelState = new ModelState { Value = valueResult }; 
     object actualValue = null; 
     try 
     { 
      actualValue = Convert.ToDecimal(valueResult.AttemptedValue, 
       CultureInfo.CurrentCulture); 
     } 
     catch (FormatException e) 
     { 
      modelState.Errors.Add(e); 
     } 

     bindingContext.ModelState.Add(bindingContext.ModelName, modelState); 
     return actualValue; 
    } 
} 

En el archivo Global.asax, añada lo siguiente a su método Application_Start

ModelBinders.Binders.Add(typeof(decimal), new DecimalModelBinder()); 
+0

Gracias por la snipet! Funciona de maravilla. Estaba teniendo problemas con los valores dobles en oposición a los decimales y estaba usando el atributo [DisplayFormat (ApplyFormatInEditMode = true, DataFormatString = "{0: #, 0}")] que formateará los dobles como moneda sin decimales. Se siente un poco tonto porque el framework no los está manejando por defecto. –

0

¿No puede simplemente cambiar el DataFormatString para que formatee el número usando un punto, p. {0: 0.00}, o similar?

+0

formatearlo no es el problema, es la validación de que se producirá un error – clyc

Cuestiones relacionadas