【问题标题】:Get multiple checked checkbox values in MVC controller在 MVC 控制器中获取多个选中的复选框值
【发布时间】:2014-12-11 23:23:34
【问题描述】:

我的代码如下:

在页面上,我有一个产品列表,其中包含该产品的复选框、代码和名称。 选择多个复选框时,在提交单击时,我需要获取选定的复选框值并将其保存在db。

中。

产品视图模型类:

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" />
 }

【问题讨论】:

  • 为您的复选框创建相同的名称,并将 id 放入 Value 属性中 - 然后在提交时您将得到它们以逗号分隔
  • 我怎样才能在模型本身中得到它而不使用表单集合。

标签: asp.net-mvc-4


【解决方案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>
}

【讨论】:

    【解决方案2】:

    从我的评论到问题演示我的代码-您可以从中获得想法

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

    提交后,您将在 Request["FocusList"] 中使用逗号分隔所有检查值

    【讨论】:

      猜你喜欢
      • 2013-11-23
      • 2012-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多