テキスト入力フィールドのname
が間違っています。ハンゼルマンのブログ投稿で説明されているように、モデルに適切な名前を付けるのではなく、モデルの値を入力しました。
それで、あなたがいくつかのビューモデルを持っていると仮定しましょう:
public class ItemViewModel
{
public string Title { get; set; }
public string PreviewDescription { get; set; }
public string FullDescription { get; set; }
}
ディクショナリを含むメインビューモデル:
public class MyViewModel
{
public Dictionary<string, ItemViewModel> ExpirimentToRemove { get; set; }
}
そして、POSTコントローラーアクションはこのビューモデルをパラメーターとして受け取ります。
[HttpPost]
public ActionResult Remove(MyViewModel model)
{
...
}
このビューモデルに正しくバインドするには、次のようにすることができます。
@model MyViewModel
@using (Html.BeginForm())
{
@for (var i = 0; i < Model.ExpirimentToRemove.Count; i++)
{
<div>
@Html.TextBox(
"ExpirimentToRemove[" + i + "].Key",
Model.ExpirimentToRemove[i].Key
)
@Html.TextBox(
"ExpirimentToRemove[" + i + "].Value.Title",
Model.ExpirimentToRemove[i].Value.Title
)
@Html.TextBox(
"ExpirimentToRemove[" + i + "].Value.PreviewDescription",
Model.ExpirimentToRemove[i].Value.PreviewDescription
)
@Html.TextBox(
"ExpirimentToRemove[" + i + "].Value.FullDescription",
Model.ExpirimentToRemove[i].Value.FullDescription
)
</div>
}
<p><button type="submit">OK</button></p>
}
この例では、辞書のキーは単純な文字列値ですが、複合型を使用することもできます。