MVC模型,其中包含对象列表作为属性

时间:2015-07-10 14:45:12

标签: c# asp.net asp.net-mvc asp.net-mvc-4 razor

我正在开发一个MVC应用程序,其中Model类Item有一个名为List<Colour>的{​​{1}}作为属性。

AvailableColoursAvailableColours类的用户定义子集。我想在复选框列表中显示所有Colour个实例,并且在提交时,Colour是包含已检查AvailableColours类的List<Colour>

在MVC中执行此操作的最佳方法是什么?

编辑:我的代码到目前为止,虽然我觉得这不是最好的MVC方式!

模型

Colour

查看

public class Item
{
    public int ID { get; set; }
    public List<Colour> AvailableColours { get; set; }
}

控制器

@model MyNamespace.Models.Item
@using MyNamespace.Models;
@{
    ViewBag.Title = "Create";

    var allColours = new List<Colour>(); //retrieved from database, but omitted for simplicity
}

<h2>Create New Item</h2>

@using (Html.BeginForm("Create", "Item", FormMethod.Post)) 
{
    <div>
        @Html.LabelFor(model => model.AvailableColours)

        @foreach (var colour in allColours)
        {

           <input type="checkbox" name="colours" value="@colour.Description" />
        }
    </div>

    <input type="submit" value="Submit" />
}

3 个答案:

答案 0 :(得分:23)

<强>模型

public class Item
{
   public List<Colour> AvailableColours { get;set; }
}

public class Colour
{
    public int ID { get; set; }
    public string Description { get; set; }
    public bool Checked { get; set; }

}

请注意Checked属性

查看循环

@using (Html.BeginForm("Create", "Item", FormMethod.Post)) 
{
   <div>
    @Html.LabelFor(model => model.AvailableColours)
    @for(var i = 0; i < Model.AvailableColours.Count; i++)
    {    

        @Html.HiddenFor(m => Model.AvailableColours[i].ID)
        @Html.HiddenFor(m => Model.AvailableColours[i].Description)
        @Html.CheckBoxFor(m => Model.AvailableColours[i].Checked)
        @Model.AvailableColours[i].Description<br/>
     }
    </div>
<input type="submit" value="Submit" />
}

注意foreach的for循环启用模型绑定,隐藏字段允许将值发布回控制器

Here's a tutorial

控制器帖子

[HttpPost]
public ActionResult Create(Item model)
{
    //All the selected are available in AvailableColours

    return View(model);
}

答案 1 :(得分:0)

确保将构造函数添加到类中并在其中声明列表。否则,它将声明为空值,以后将无法设置。

public class Item
{
  public Item(){

    AvailableColours =new List<Color>();
}

}

答案 2 :(得分:0)

谢谢您的所有建议-非常宝贵,但是在我的程序绑定到模型之前,我还需要进行另一项更改,那就是在List中添加getter和setter,如下所示:

public class CartViewModel
{
    public List<CartRowViewModel> cartRows {get; set; }

    public CartViewModel()
    {
        this.cartRows = new List<CartRowViewModel>();
    }
}