2016-04-27 71 views
0

检索值我在我的视图以下代码: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个复选框?

+0

不清楚你想做什么。你的复选框甚至没有value属性(如果你有一个复选框,你永远不会使用'bool checkboxName'来绑定)你真的想用这个来实现什么? –

回答

0

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

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

注意:这里假定它们全都在同一页上。

@foreach (var control in this.Controls) 
     { 
      if (control is CheckBox) 
      { 
       if (((CheckBox)control).Checked) 
       { 
        //record as you need 
       }                     
      } 
     } 
+0

演示将是非常有用的:) –

+0

不太确定这段代码的工作原理,但请让我知道关于这个MVC帮助函数,如果你弄明白了。谢谢! –

0

我想到的方法可以做到这一点,这可能不理想,但仍能正常工作是使用的FormCollection的MVC框架,因为你使用的是循环的,你可以循环在动作元素 ///您的视点侧

@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()); 
    } 
} 
+0

模型如何/为什么作为参数传递以从视图到控制器检索值?它保持为空,在我的情况下没有任何价值。 –

+0

你不需要传递模型作为参数,它只是作为例子 –

0

我想你可以复选框的整个列表传递给控制器​​后,然后通过迭代次EM像

[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)    
     } 

摆脱,RNAME,IsSelected(someproperty到存储布尔)是我的模型属性相关的复选框列表