モデルバインディングがドロップダウンで機能しないのはなぜですか?
私は何を間違っていますか?
私の問題を説明するために、次のことを行いました。
新しい asp.net MVC プロジェクト (beta1) を作成しました 次のクラスを作成しました:
HomeViewData : ViewDataDictionary
+List : SelectList
次のように Viewdata を HomeController クラスに追加しました
Homecontroller: Controller
+HomeViewData vd = new HomeViewData
Home.Index() メソッドに次の行を追加しました
vd.list = new SelectList(new List<string>(){"test", "test1", "test2"});
return View("Index", vd);
同じメソッドをレプリケートしましたが、ポストバック呼び出しをキャッチするために異なる署名を使用しました
[AcceptVerps(HttpVerbs.Post)]
public ActionResult Index(HomeViewdata d)
ここでは、コードの最初の行にブレークポイントを追加しました。
次に、次のコードを Index.aspx に追加しました
<%Html.BeginForm();%>
<%=Html.DropDownList("List")%>
<%Html.EndForm();%>
その結果、test、test1、および test2 という値の適切なドロップダウンがあるページが表示されます。
次に、値を選択した後、Enter キーを押し (送信ボタンは気にしませんでした)、ブレークポイントがコードをどのように停止するかを確認します。HomeViewData の値を確認します...
NULL
同じ演習をテキストボックスなどで行うと、すべて正常に動作します...
--編集--
この投稿以降に試したこと:
- [Bind(Prefix="")] フィルの提案に従ってアクションに属性を追加する
- [Bind(Prefix=" ")] を追加して、「空の名前は許可されていません」というエラーが削除されるかどうかを確認します
- コントロールの名前にアクションのパラメーターの名前を追加する