我有一个班级:
public class CarList
{
public int quantity{get;set;}
public List<Car> Cars {get;set;}
}
public class Car {
public string Name {get;set;}
}
然后我在列表中创建一个包含三辆汽车的汽车列表。然后我使用for循环Model.Cars在屏幕上显示信息。当我提交表单时,数量字段具有有效值但Cars为空。
[HttpPost]
public ActionResult Save(CarList list)
{
//why is list.Cars NULL when i am posting three items in the list
}
查看: Model = Car,添加了一行
为Car添加了<tr><td>Name</td><td>Html.TextBoxFor(x=>Model.Name)</td></tr>
在主视图中: Model = CarList,添加了forloop
@{foreach (Car item in Model.Cars)
{
@Html.EditorFor(x=>item);
}
答案 0 :(得分:1)
实际上你不需要循环收集汽车。你就像
一样@Html.EditorFor(x => x.Cars)
答案 1 :(得分:0)
我认为这是问题所在:
@foreach (Car item in Model.Cars)
{
@Html.EditorFor(x=>item);
}
将其更改为
@foreach (Car item in Model.Cars)
{
@Html.EditorFor(x=>item.Name);
}
虽然我不记得曾经遇到过这个问题,但是模型绑定器的情况可能不够灵活,无法将多个级别绑定。它也可能有助于将Glimpse (http://getglimpse.com/)添加到您的项目中,以便您可以看到请求的实际处理方式。
答案 2 :(得分:0)
使用 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.
}
您现在可以看到结果