使用 MVC 4 Forms,我有一个模型,它总是在一个List<T>
属性中包含四个孩子。该视图正确显示模型,其中四个子模型中的每一个都使用 Razor 局部视图渲染。问题是,当我提交/发布时,模型用子列表的空值反序列化。
模型:
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 方法中获取要反序列化的根级别属性。
我尝试添加UpdateModel(model);
到控制器 Post 方法的开头,但那里没有运气。有任何想法吗?
编辑
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>