0

このコードは、いくつかのオプションを含むドロップダウン ボックスを表示します。オプションは小数です。ユーザーはいずれかを選択し、保存を押します。ポストバック時に、選択したオプションをドロップダウン ボックスで選択する必要があります。これは文字列の問題ではありません。このコードは小数を使用しています。ポストバックが戻ってくると、何も選択されていません。小数の精度が原因で、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 進数の精度を確認するヒントを得ることができました。

4

1 に答える 1