私はdouble型のモデルのプロパティを持っています。私のアイテムの1つは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プロパティを2か所で使用し、編集ビューと表示ビューを使用します。それぞれのレンダリング方法を以下に示します。
@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.EditorFor(model => model.NeckDimension, new {@class = "formatteddecimal"})
それは私のオプションはJavaScriptを使用してこの問題を解決するか、エディタのテンプレートで固定されているように見えます:
@Html.TextBoxFor(model => model.NeckDimension, new { style = "width:75px;" })
このコードは例外を与えましたしかし、私はこの時点で第2の選択肢を研究して学ぶ時間がありません。
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" />
}
DisplayFormatデコレータを使用する@Darin Dimitrovのアプローチが好きですが、私の場合は動作しません。私は、他のデコレータの1つがこれを投げているかどうかはわかりませんが、まだ解決できる解決策が必要です。 –