このコードは、いくつかのオプションを含むドロップダウン ボックスを表示します。オプションは小数です。ユーザーはいずれかを選択し、保存を押します。ポストバック時に、選択したオプションをドロップダウン ボックスで選択する必要があります。これは文字列の問題ではありません。このコードは小数を使用しています。ポストバックが戻ってくると、何も選択されていません。小数の精度が原因で、ASP.NET MVC のマッチングに問題があると思います。
ドロップダウン ボックスに表示する小数のリスト
public static List<decimal> MyCustomFieldOptions
{
get
{
var x = new List<decimal>();
x.Add(0.10m);
x.Add(0.25m);
return x;
}
}
ビュー モデルのプロパティ:
[UIHint("MyCustomField")]
public decimal MyCustomField { get; set; }
ビューで:
@Html.EditorFor(model => model.MyCustomField)
エディター テンプレート:
@model decimal
@Html.DropDownListFor(x => x, new SelectList(ProjectNamespace.MyViewModel.MyCustomFieldOptions), new {size="2"})
/Shared/EditorTemplates/MyCustomField.cshtml
このコードは、2 つのオプションから選択できるリスト ボックスを適切に表示します。ユーザーはいずれかを選択し、保存を押すと、コントローラーが値を取得します。コントローラーには、 または のいずれかが表示され0.25
ます0.1
。ただし、ページが戻ってくると、項目は選択されていません。
小数の精度の問題が原因だと確信しています。
@Model.MyCustomField.ToString()
戻ります0.250
。
エディター テンプレートの出力に注目してください。
<select id="MyCustomField" name="MyCustomField" size="2">
<option>0.10</option>
<option>0.25</option>
</select>
オプションの小数精度は異なります。 0.25
、ではない0.250
ので、おそらく一致しません。
このSO articleを読んで、エディター テンプレートを作成し、10 進数の精度を確認するヒントを得ることができました。