我有一个类:
public class CarList
{
public int quantity{get;set;}
public List<Car> Cars {get;set;}
}
public class Car {
public string Name {get;set;}
}
然后我创建具有三个汽车在列表中的汽车名单。 然后我显示使用内循环Model.Cars在屏幕上的信息。 当我提交表单,数量字段,但汽车的有效值为空。
[HttpPost]
public ActionResult Save(CarList list)
{
//why is list.Cars NULL when i am posting three items in the list
}
查看:型号=车,加了一行
车用添加了新的编辑模板与<tr><td>Name</td><td>Html.TextBoxFor(x=>Model.Name)</td></tr>
并且在主视图中:型号=卡洛斯,添加的for循环
@{foreach (Car item in Model.Cars)
{
@Html.EditorFor(x=>item);
}
使用一个EditorTemplate,你会好的。
创建一个名为“EditorTemplates”的文件夹,并创建一个名称的视图(编辑模板) Car.cshtml
现在下面的代码添加到这个新的观点。
@model Car
<p>
@Html.TextBoxFor(x => x.Name)
</p>
现在,在您的主视图中,使用Html.EditorFor HTML辅助方法来调用这个编辑器模板
@model SO_MVC.Models.CarList
<h2>CarList</h2>
@using (Html.BeginForm())
{
<p>Quanitty </p>
@Html.TextBoxFor(x => x.quantity)
@Html.EditorFor(x=>x.Cars)
<input type="submit" value="Save" />
}
现在有一个HTTPPOst操作方法来接受的形式发布
[HttpPost]
public ActionResult CarList(CarList model)
{
//Check model.Cars property now.
}
现在,您将看到的结果
其实你不通过汽车收集需要循环。 你只需要像
@Html.EditorFor(x => x.Cars)
我认为这是问题:
@foreach (Car item in Model.Cars)
{
@Html.EditorFor(x=>item);
}
将其更改为
@foreach (Car item in Model.Cars)
{
@Html.EditorFor(x=>item.Name);
}
它可能不是足够聪明,不止一个级别绑定下来模型绑定,虽然我不记得曾经有这个问题的情况。 它也可以帮助增加掠影(http://getglimpse.com/)到您的项目,这样就可以看到该请求是如何实际处理。