辞書プロパティを含むモデルがあります。(これは、より大きなプロジェクトからこの例に抽出されましたが、まだ同じ問題があることを確認しました)
public class TestModel
{
public IDictionary<string, string> Values { get; set; }
public TestModel()
{
Values = new Dictionary<string, string>();
}
}
コントローラー
public class TestController : Controller
{
public ActionResult Index()
{
TestModel model = new TestModel();
model.Values.Add("foo", "bar");
model.Values.Add("fizz", "buzz");
model.Values.Add("hello", "world");
return View(model);
}
[HttpPost]
public ActionResult Index(TestModel model)
{
// model.Values is null after post back here.
return null; // I set a break point here to inspect 'model'
}
}
とビュー
@using TestMVC.Models
@model TestModel
@using (Html.BeginForm())
{
@Html.EditorFor(m => m.Values["foo"]);
<br />
@Html.EditorFor(m => m.Values["fizz"]);
<br />
@Html.EditorFor(m => m.Values["hello"]);
<br />
<input type="submit" value="submit" />
}
これは、次のようにブラウザにレンダリングされます。
<input class="text-box single-line" id="Values_foo_" name="Values[foo]" type="text" value="bar" />
私が抱えている問題は、ポストバック後のモデルでディクショナリがnullになることです。
- 私はこれを正しくやっていますか、それとももっと良い方法がありますか?
フォームのフィールドは可変であるため、ある種のKey-Valueストレージが必要です。そのため、POCOモデルを使用できません。