У меня есть свойство моей модели типа double. Один из моих элементов имеет значение 0,000028, но при отображении моего вида редактирования редактор для этого значения отображается как 2.8e-005.
Кроме того, что это сбивает с толку моих пользователей, оно также не проходит проверку моего регулярного выражения
[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; }
Как мне получить это поле для отображения? У меня есть этот фрагмент кода (показанный ниже), который будет отображать десятичное число, как я хочу, но я не уверен, где его реализовать.
var dbltest = 0.000028D;
Console.WriteLine(String.Format("{0:F20}", dbltest).TrimEnd('0'));
Я использую свойство NeckDimension в двух местах, и редактирую вид и вид дисплея. Вот как каждый из них отображается.
@Html.TextBoxFor(model => model.NeckDimension, new { style = "width:75px;" })
@Html.DisplayFor(model => model.NeckHDimension)
UPDATE
Очевидно, DisplayFormat не будет работать с TextBoxFor. Я попытался изменить свой @ Html.TextBoxFor на Html.EditorFor и присвоил ему класс, но это не удалось, за исключением следующего:
The model item passed into the dictionary is of type 'System.Double', but this dictionary requires a model item of type 'System.String'
Этот старый код все еще работает:
@Html.TextBoxFor(model => model.NeckDimension, new { style = "width:75px;" })
Этот код дал исключение:
@Html.EditorFor(model => model.NeckDimension, new {@class = "formatteddecimal"})
Похоже, мои варианты - это исправить с помощью javascript или исправить с помощью шаблона редактора, но у меня нет времени исследовать и изучать 2-й вариант на данный момент.
РЕШЕНИЕ:
я создал шаблон редактора для double? следующим образом.
@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" />
}