我的观点中有以下代码:
@foreach (var x in model)
{
<input type="checkbox" name="@x.name" /> @x.name
}
该循环将创建大约 10 个复选框,每个复选框都有一个在运行时生成的唯一名称。这样做的重点是使这种动态,而无需我键入每个名称的值。因此,当我尝试检查我的控制器中是否选中了这些复选框中的每一个时,我该怎么做?通常,我会将参数传递给我的控制器
public ActionResult MyController(string/bool checkboxName)
如果我有一个复选框,这将正常工作。但是,在控制器中为每个复选框传递 10 个参数听起来很疯狂!如果我稍后向x in model
添加更多复选框,以便我有 20 个复选框,该怎么办?
在循环中,您正在创建复选框,将它们添加到 ICollection,然后遍历该集合以查找 CheckBox.Checked。
我确定 MVC 中有一个辅助功能,但我正在旅行并且不太记得它。这样的东西应该有效,根据需要进行调整。
注意:这假设它们都在同一页面上。
@foreach (var control in this.Controls)
{
if (control is CheckBox)
{
if (((CheckBox)control).Checked)
{
//record as you need
}
}
}
的方法之一,可能并不理想,但仍然可以工作,是在MVC框架中使用FormCollection,因为您使用的是循环,您可以在操作中循环元素您的视图侧
@foreach (var x in model)
{
<input type="checkbox" name="@x.name" /> @x.name
}
行动方面
public ActionResult MyController(FormCollection collection, YourModel model)
{
foreach (var x in model)
{
bool IsThisCheked= Convert.ToBoolean(collection[x.name].ToString());
}
}
我认为您可以将整个复选框列表传递给后期控制器,然后像
[HttpPost]
public ActionResult About(List<Requirements> requirements)
{
foreach (var item in requirements)
{
if (item.IsSelected == true)
{
//perform some operation
}
}
列表是我在提交表单时从视图传递到控制器的列表现在来看,可能是这样的
@for (int i = 0; i < Model.Requirements.Count; i++)
{
@Html.HiddenFor(m => m.Requirements[i].RId)
@Html.CheckBoxFor(m => m.Requirements[i].IsSelected, new { id = "requirements_" + i, @class = "divider" })
@Html.DisplayFor(m => m.Requirements[i].RName)
}
RId,RName,IsSelected(一些用于存储布尔值的属性)是我的模型属性,与复选框列表相关