在MVC控制器中获取多个选中的复选框值

时间:2014-12-11 14:57:20

标签: asp.net-mvc-4

我的代码如下:

在页面上,我有一个带有复选框,代码和附件的产品列表。该产品的名称。 选择多个复选框时,在提交点击时,我需要获取所选的复选框值&将其保存在数据库中。

产品视图模型类:

public class ProductVM
{
 public ProductVM()
    {
        this.ProductsList = new List<Product>();
    }

public List<Product> ProductsList { get; set; }

public class Product
{
    public bool IsSelected { get; set; }
    public string Code { get; set; }
    public string Name { get; set; }
}

}

产品总监:

[HttpGet]
public ActionResult Edit()
{
var model = new ProductVM();

        var product1 =  new ProductVM.Product
            {
                Code = "Product1",
                Name = "Apple"
            };


        var product2 =  new ProductVM.Product 
            {
                Code = "Product2",
                Name = "Banana"
            };

        model.ProductsList.Add(Product1);
        model.ProductsList.Add(Product2);

        return View(model);
     }

[HttpPost]
public ActionResult Edit(ProductVM model)
{
if (model.ProductsList.Any(m => m.Selected))  
        {
           //How to get the selected Code & Name here
        }
}

产品视图:

@model ProductVM
@using(Html.BeginForm())
{
   foreach (var item in Model.ProductsList)
   {
        @Html.CheckBox("IsSelected", item.IsSelected) 
        @Html.Label(item.Code)
        @Html.Label(item.Name)
   }
   <input type="submit" />
 }

2 个答案:

答案 0 :(得分:1)

首先,您需要使用for代替foreach。否则Razor将不会生成正确的字段名称。其次,您需要CodeName属性的隐藏输入,以便将其回发:

for (var i = 0; i < Model.ProductsList.Count(); i++)
{
    @Html.HiddenFor(m => m.ProductsList[i].Code)
    @Html.HiddenFor(m => m.ProductsList[i].Name)
    <label>
        @Html.CheckBoxFor(m => m.ProductsList[i].IsSelected)
        @Html.DisplayFor(m => m.ProductsList[i].Code)
        @Html.DisplayFor(m => m.ProductsList[i].Name)
    </label>
}

答案 1 :(得分:1)

从我的评论中演示我的代码以提问 - 你可以从中获得想法

@foreach (var item in ViewBag.FocusesList)
{
    <label>
        <input type="checkbox" value="@item.ConfigurationId" name="FocusList" id="FocusList" /> @item.Value.Name
    </label>
}

提交后,您在请求[&#34; FocusList&#34;]

中用逗号分割所有选中的值