2

私の MVC フォームでは、ドロップダウン ボックスを ViewModel の列挙にバインドする必要があります。私が見つけた最良の方法は、ここで説明されています。

最初は動作しているように見えましたが、フォームに検証を追加した今、ViewModel にバインドされていないことがわかりました。

これが私のかみそりのコードです:

<div class="editor-field">
    @Html.DropDownListFor(model => model.response, 
                          new SelectList(Enum.GetValues(typeof(Vouchers.Models.ResponseType))),
                          "Please Select")
</div>

フィールドのビューモデルの定義は次のとおりです。

[DisplayName("Response")]
[Range(1, int.MaxValue, ErrorMessage = "You must select a response before submitting this form.")]
public ResponseType response { get; set; }

問題は、フォームを送信できないことです。ドロップダウンから応答を選択した後でも、範囲属性の検証エラー メッセージが表示され、クライアント側の検証によってフォームが送信されません。

これは、ドロップダウンの SelectList に、基になる整数値ではなく、列挙型の文字列名のみが含まれているためだと思います。

どうすればこの問題を解決できますか?

4

1 に答える 1

5

キーが列挙型の整数表現と文字列 - 列挙型の名前になるディクショナリを作成します。

@Html.DropDownListFor(model => model.response, 
                      new SelectList(Enum.GetValues(typeof(Vouchers.Models.ResponseType)).OfType<Vouchers.Models.VoucherResponseType>().ToDictionary(x => Convert.ToInt32(x), y => y.ToString()), "Key", "Value"), "Please Select")

エラーの可能性があり申し訳ありませんが、試していません。

于 2012-10-05T19:28:29.910 に答える