我的代码如下:
在页面上,我有一个带有复选框,代码和附件的产品列表。该产品的名称。 选择多个复选框时,在提交点击时,我需要获取所选的复选框值&将其保存在数据库中。
产品视图模型类:
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" />
}
答案 0 :(得分:1)
首先,您需要使用for
代替foreach
。否则Razor将不会生成正确的字段名称。其次,您需要Code
和Name
属性的隐藏输入,以便将其回发:
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;]
中用逗号分割所有选中的值