こんにちは、次のような Dictionary プロパティを持つ MVC 3 プロジェクトで定義されたモデル オブジェクトがあります。
MyObj.ObjDictionary<string,string>
私は2つのコントローラメソッドを持っています.1つはビューを返すことを処理し、もう1つはビューからPOSTされたフォームを処理することです.
public ActionResult Scanner(string val_1, string val_2, string val_3)
{
//Fetch sessionObj from Model
MyObj sessionObj = getSessionObj(val_1, val_2, val_3);
//At this point model.ObjDictionary<string,string> contains data
return View(sessionObj);
}
[HttpParamAction]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Scanner(MyObj model)
{
//At this point model.ObjDictionary<string,string> is null
//i.e. binding is not being properly achieved
//Validate POSTed data
}
ビューで、各キーと値のペア (kvp) を反復処理します。プロパティは動的であり、辞書の値がいくつあるかを知る方法がないため、この方法で行う必要があります。
@using (Html.BeginForm("Action", "Home"))
{
@foreach (var kvp in Model.ObjDictionary)
{
<span>@Html.Label("Scan " + @kvp.Key)</span>
<span>@Html.TextBox(kvp.Key, "", new { @style = "font-size:Medium;width:400px;" })</span>
}
<input type="submit" name="Cancel" value="Cancel" />
<input type="submit" id="Scanner" name="Scanner" value="Scanner" />
}
目標は、ユーザーがデータを入力し、そのデータを特定のキーの値にバインドする方法を提供することです。私の問題は、Model.ObjDictionary が POST されると null になることです。何が間違っているのかわかりません。この記事を読みましたが、これは辞書に既存の値があることを前提としています。ModelBinder が、ユーザーが入力したデータを、特定のキーにマップされた辞書値にバインドできる方法はありますか?