主要问题是string 属性存储单个字符串,您应该使用集合属性来绑定复选框,例如List<string> @Ajay 之前提到过。
因此,您应该使用以下设置:
型号
public class MyModel
{
public MyModel()
{
SelectedCategories = new List<string>();
// put categories here
Categories = new List<SelectListItem>() { ... };
}
// other properties
public List<string> SelectedCategories { get; set; }
public List<SelectListItem> Categories { get; set; }
}
查看
@foreach (var item in Model.Categories)
{
<input type="checkbox" name="SelectedCategories" value="@item.Value" ... />
}
控制器
[HttpPost]
public ActionResult Index(MyModel model)
{
if (ModelState.IsValid)
{
// create comma-separated values
var selectedCategories = string.Join(",", model.SelectedCategories);
// Save data to database, and redirect to Success page.
return RedirectToAction("Success");
}
}
如果您想使用 CheckBoxFor 助手,请使用 SelectListItem ,它具有 Selected 属性和 bool 类型,因为 CheckBoxFor 绑定 bool 属性:
型号
public class MyModel
{
public MyModel()
{
// put categories here
Categories = new List<SelectListItem>() { ... };
}
// other properties
public List<SelectListItem> Categories { get; set; }
}
查看
@for (var i = 0; i < Model.Categories.Count; i++)
{
@Html.CheckBoxFor(model => model.Categories[i].Selected)
@Html.HiddenFor(model => model.Categories[i].Text)
@Html.HiddenFor(model => model.Categories[i].Value)
}
控制器
[HttpPost]
public ActionResult Index(MyModel model)
{
if (ModelState.IsValid)
{
string selectedCategories = string.Join(",",
model.Categories.Where(x => x.Selected == true)
.Select(x => x.Text).ToList());
// Save data to database, and redirect to Success page.
return RedirectToAction("Success");
}
}
注意:
有一个名为 CheckBoxListFor 的自定义助手,应考虑从 List<T> 属性创建复选框列表。
复选框列表实现示例可见here。
相关问题:
Get comma-separated string from CheckboxList HTML Helper
Get Multiple Selected checkboxes in MVC