我有我的模型屬性是雙重類型。其中一個項目的值爲0.000028,但當編輯視圖呈現時,此值的編輯器顯示爲2.8e-005。MVC3編輯器雙顯示科學記數法
從這個令人困惑我的用戶除此之外,它也失敗的
[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解決這個或編輯模板修復,但是現在我沒有時間研究和學習第二個選項。
SOLUTION:
我創建了一個模板編輯器,雙?如下。
@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" />
}
我喜歡@Darin Dimitrov使用DisplayFormat裝飾器的方法,但在我的情況下它不起作用。我不確定其他裝飾器之一是否會拋棄它,但我仍然需要一個可行的解決方案。 –