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

时间:2016-04-27 15:58:20

标签: c# asp.net-mvc-4 razor checkbox

我在视图中有以下代码:

@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个复选框,该怎么办?

3 个答案:

答案 0 :(得分:0)

在循环中,您将创建复选框,将它们添加到ICollection,然后遍历该集合,查找CheckBox.Checked。

我确定在MVC中有一个辅助功能但是我旅行并且不记得它。像这样的东西应该工作,根据需要进行调整。

注意:这假设它们都在同一页面上。

<i class="icon icon-accessory">
  <img class="padding-basic-right" src="img/love.svg" width="48px" ng-if="track.loved"/>
  <img class="padding-basic-right" src="img/skip.svg" width="48px" ng-if="!track.loved"/>
</i>

答案 1 :(得分:0)

我认为执行此操作的方法之一可能不太理想,但仍然可以使用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());
   }
}

答案 2 :(得分:0)

我认为您可以将整个复选框列表传递给帖子控制器,然后像

一样遍历它们
Producer exited with status: 1
Consumer exited with status: 1

List是我在提交表单时从视图传递给控制器​​的列表 现在来看它可能是这样的

[HttpPost]
    public ActionResult About(List<Requirements> requirements)
    {
     foreach (var item in requirements)
        {

          if (item.IsSelected == true)
          {
            //perform some operation
          }
        }

RId,RName,IsSelected(someproperty to store boolean)是我的与checkboxlist相关的模型属性