MVC 4 フォームを使用して、プロパティに常に 4 つの子を含むモデルがありList<T>
ます。ビューには、Razor 部分ビューでレンダリングされた 4 つの子モデルのそれぞれで、モデルが正しく表示されます。問題は、送信/投稿すると、モデルが子リストの null 値で逆シリアル化されることです。
モデル:
public class MyModel
{
public int SomeValue { get; set; }
public List<ChildModel> Children { get; set; }
...
}
意見:
@model MyProject.Models.MyModel
@using (Html.BeginForm())
{
@Html.LabelFor(model => model.SomeValue)
@Html.Partial("ChildPartial", Model.Children[0])
@Html.Partial("ChildPartial", Model.Children[1])
@Html.Partial("ChildPartial", Model.Children[2])
@Html.Partial("ChildPartial", Model.Children[3])
<input type="submit" value="Save" />
}
コントローラ:
public class MyController : Controller
{
public ActionResult Index()
{
MyModel model = new MyModel();
model.Children = new List<ChildModel>();
model.Children.Add(new ChildModel());
model.Children.Add(new ChildModel());
model.Children.Add(new ChildModel());
model.Children.Add(new ChildModel());
return View(model);
}
[HttpPost]
public ActionResult Index(MyModel model)
{
//model.Children is null here
//do stuff
...
return RedirectToAction("Index", "SomeOtherController");
}
}
ChildPartial
ビューはそれぞれ正しくレンダリングされており、コントロールに値を入力していますが、List<ChildModel>
. MyModel
Post メソッドで逆シリアル化するルート レベルのプロパティしか取得できません。
コントローラーの Post メソッドの先頭に追加しようとしUpdateModel(model);
ましたが、運がありません。何か案は?
編集
ChildModel.cs:
public class ChildModel
{
public String Name { get; set; }
public double Ratio { get; set; }
...
}
ChildPartial.cshtml:
@model MyProject.Models.ChildModel
<div>
<div>
<div>
<span>@Model.Name</span>
</div>
<div>
@Html.LabelFor(m => m.Ratio)
@Html.TextBoxFor(m => m.Ratio, new { autocomplete = "off" })
@Html.ValidationMessageFor(m => m.Ratio)
</div>
</div>
...
</div>