MVC3如何发布在控制器类中的一个列表?(MVC3 how to post a list withi

2019-07-29 09:52发布

我有一个类:

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

Answer 1:

使用一个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.
}

现在,您将看到的结果



Answer 2:

其实你不通过汽车收集需要循环。 你只需要像

@Html.EditorFor(x => x.Cars)


Answer 3:

我认为这是问题:

@foreach (Car item in Model.Cars)
       {
           @Html.EditorFor(x=>item);
       }

将其更改为

@foreach (Car item in Model.Cars)
       {
           @Html.EditorFor(x=>item.Name);
       }

它可能不是足够聪明,不止一个级别绑定下来模型绑定,虽然我不记得曾经有这个问题的情况。 它也可以帮助增加掠影(http://getglimpse.com/)到您的项目,这样就可以看到该请求是如何实际处理。



文章来源: MVC3 how to post a list within a class in controller?