2016-04-27 84 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到存儲布爾)是我的模型屬性相關的複選框列表