Tengo una propiedad de mi modelo que es de tipo doble. Uno de mis artículos tiene un valor de 0.000028, pero cuando se muestra mi vista de edición, el editor de este valor se muestra como 2.8e-005.MVC3 Editor Para la doble notación científica que muestra
Aparte de esto siendo confuso para mis usuarios, sino que también falla la validación mi expresión regular de
[Display(Name = "Neck Dimension")]
[RegularExpression(@"[0-9]*\.?[0-9]+", ErrorMessage = "Neck Dimension must be a Number")]
[Range(0, 9999.99, ErrorMessage = "Value must be between 0 - 9,999.99")]
[Required(ErrorMessage = "The Neck Dimension is required.")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:F20}")]
public double? NeckDimension { get; set; }
¿Cómo consigo este campo para mostrar? Tengo este código (que se muestra a continuación) que renderizará un decimal como quiero, pero no estoy seguro de dónde implementarlo.
var dbltest = 0.000028D;
Console.WriteLine(String.Format("{0:F20}", dbltest).TrimEnd('0'));
Utilizo la propiedad NeckDimension en dos lugares, y edito la vista y una vista en pantalla. Aquí se muestra cómo se rinden cada uno.
@Html.TextBoxFor(model => model.NeckDimension, new { style = "width:75px;" })
@Html.DisplayFor(model => model.NeckHDimension)
ACTUALIZACIÓN Al parecer, el formatSalida no funcionará con TextBoxFor. Intenté cambiar mi @ Html.TextBoxFor a un Html.EditorFor y darle una clase pero falló con la siguiente excepción.
The model item passed into the dictionary is of type 'System.Double', but this dictionary requires a model item of type 'System.String'
Este código antiguo sigue funcionando:
@Html.TextBoxFor(model => model.NeckDimension, new { style = "width:75px;" })
Este código le dio la excepción:
@Html.EditorFor(model => model.NeckDimension, new {@class = "formatteddecimal"})
Parece que mis opciones son solucionar este problema con javascript o fijarlo con un editor de plantillas , pero no tengo tiempo para investigar y aprender la segunda opción en este punto.
SOLUCIÓN:
creé un editor de plantillas para el doble? como sigue.
@model double?
@{
var ti = ViewData.TemplateInfo;
var displayValue = string.Empty;
if (Model.HasValue) {
displayValue = String.Format("{0:F20}", @Model.Value).TrimEnd('0');
}
<input id="@ti.GetFullHtmlFieldId(string.Empty)" name="@ti.GetFullHtmlFieldName(string.Empty)" type="text" value="@displayValue" />
}
Me gusta el enfoque de @Darin Dimitrov de usar el decorador DisplayFormat, pero no funciona en mi caso. No estoy seguro si uno de los otros decoradores está tirando esto, pero todavía necesito una solución que funcione. –