c# 从视图中动态创建的复选框中检索控制器中的值



我的观点中有以下代码:

@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(一些用于存储布尔值的属性)是我的模型属性,与复选框列表相关

最新更新