Mam właściwość mojego modelu, która jest typu double. Jeden z moich produktów ma wartość 0.000028, ale kiedy mój widok edycji jest renderowany, edytor dla tej wartości wyświetla się jako 2.8e-005.Edytor MVC3 dla Double pokazujący notację naukową
Poza tym jest mylące dla moich użytkowników, ale również nie moja regularna walidacja wyrazem
[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; }
Jak mogę to pole, aby wyświetlić? Mam ten fragment kodu (pokazany poniżej), który będzie wyświetlał dziesiętny, jak chcę, ale nie jestem pewien, gdzie go zaimplementować.
var dbltest = 0.000028D;
Console.WriteLine(String.Format("{0:F20}", dbltest).TrimEnd('0'));
Używam właściwości NeckDimension w dwóch miejscach i edytuję widok oraz widok wyświetlacza. Oto, jak każdy z nich jest renderowany.
@Html.TextBoxFor(model => model.NeckDimension, new { style = "width:75px;" })
@Html.DisplayFor(model => model.NeckHDimension)
UPDATE Widocznie DisplayFormat nie będzie działać z TextBoxFor. Próbowałem zmienić mój @ Html.TextBoxFor na Html.EditorFor i przyznając mu klasę, ale nie powiodło się z następującym wyjątkiem.
The model item passed into the dictionary is of type 'System.Double', but this dictionary requires a model item of type 'System.String'
Ten stary kod nadal działa:
@Html.TextBoxFor(model => model.NeckDimension, new { style = "width:75px;" })
Kod ten dał wyjątek:
@Html.EditorFor(model => model.NeckDimension, new {@class = "formatteddecimal"})
to wygląda moje opcje to naprawić z javascript lub go naprawić za pomocą edytora szablonów , ale nie mam czasu na zbadanie i poznanie drugiej opcji w tym momencie.
ROZWIĄZANIE:
stworzyłem szablon edytor podwójnie? następująco.
@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" />
}
Lubię podejście @Darina Dymitrowa do korzystania z dekoratora DisplayFormat, ale nie działa ono w moim przypadku. Nie jestem pewien, czy któryś z innych dekoratorów rzuca to, ale nadal potrzebuję rozwiązania, które działa. –