asp.net mvc - truncar - MVC3 Decimal truncado a 2 decimales en la edición
truncar a la unidad (3)
Estoy ejecutando MVC3 con Razor y noté que los valores decimales se truncan a 2 decimales cuando está en modo de edición. Me las he arreglado para anotar mi propiedad con un formato de visualización. Esto no parece una solución muy buena ya que tendré que acordarme de hacer esto para cada nueva vista que genere (o actualizo mis plantillas).
He comprobado el valor devuelto por nuestro servicio al controlador y es correcto en 1.144, pero cuando está vinculado a la vista sale como 1.14 en el TextBox
Propiedad ViewModel
[Required]
[Display(Name = "Unit Price")]
public decimal UnitPrice { get; set; }
Código .cshtml
@Html.LabelFor(model => model.UnitPrice)
@Html.EditorFor(model => model.UnitPrice)
@Html.ValidationMessageFor(model => model.UnitPrice)
Si decorar la propiedad con lo siguiente, entonces funciona.
[DisplayFormat(
ApplyFormatInEditMode = true,
DataFormatString = "{0:0.00###########################}",
NullDisplayText = "")]
¿Algunas ideas?
Así es como se define la plantilla del editor Decimal por defecto:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<script runat="server">
private object ModelValue {
get {
if (ViewData.TemplateInfo.FormattedModelValue == ViewData.ModelMetadata.Model) {
return String.Format(
System.Globalization.CultureInfo.CurrentCulture,
"{0:0.00}", ViewData.ModelMetadata.Model
);
}
return ViewData.TemplateInfo.FormattedModelValue;
}
}
</script>
<%= Html.TextBox("", ModelValue, new { @class = "text-box single-line" }) %>
Observe el formato {0:0.00}
.
Entonces tienes dos posibilidades:
- Use el
double
lugar deldecimal
como tipo en su modelo Modifique la plantilla del editor por defecto creando un
~/Views/Shared/EditorTemplates/Decimal.cshtml
que podría verse así:@Html.TextBox( "", ViewData.TemplateInfo.FormattedModelValue, new { @class = "text-box single-line" } )
Probablemente también desee modificar la plantilla de visualización.
OMI, este artículo tiene una mejor opción:
html-editorfor-with-3-decimal-places
Usé este código para mostrar hasta 4 dígitos decimales en mi EditFor:
[Display(Name = "Discount Percentage")]
[Range(0, 100.0)]
[DisplayFormat(DataFormatString="{0:0.0000}", ApplyFormatInEditMode=true)]
public Decimal? DiscountPercent { get; set; }
Si no necesita la funcionalidad de ''EditorFor'' HtmlHelper, simplemente puede cambiarla por ''TextBoxFor'' y no debe truncar su valor decimal ...