1

我有一堂课:

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);
       }
4

3 回答 3

1

实际上,您不需要遍历汽车集合。你只是有它喜欢

@Html.EditorFor(x => x.Cars)
于 2012-05-15T23:52:12.877 回答
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/)添加到您的项目中也可能会有所帮助, 以便您可以查看请求的实际处理方式。

于 2012-05-15T22:58:16.800 回答
0

使用EditorTemplate,你会很好。

创建一个名为“ EditorTemplates ”的文件夹并创建一个名为“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.
}

您现在将看到结果 在此处输入图像描述

于 2012-05-15T23:50:04.000 回答