2012-03-25 61 views
4

我是新來的MVC3,我無法弄清楚如何在MVC中使用複選框。 我有我的觀點一堆文字像MVC3 - 如何正確使用@ html.checkbox?

text1 
text2 
text3 
text4 
text5 

submitbutton 

本文不涉及任何模型它只是純文本。我想爲每個項目添加一個複選框,並將其與控制器鏈接,以便當用戶選擇某些複選框值並單擊提交按鈕時,我的控制器會選取哪些項目已被選中。 我試着使用@ html.checkbox(「文本」 +指數),並試圖將控制器

[HttpPost] 
public ActionResult controller(List<string> list) 
{ 
} 

但是,這並不拿起選擇的項目列表。你能告訴我我做錯了什麼或者做了什麼嗎?

+1

您應該創建與布爾屬性和字符串屬性關聯的ViewModel。 ViewModels是你的朋友。 – 2012-03-25 22:55:18

回答

6

創建一個包含所有值的ViewModel。填充ViewModel並將其發送到視圖。當檢查到某些東西時,您會知道帖子中的內容。

public class MyModelViewModel 
{ 
    public List<CheckBoxes> CheckBoxList {get; set;} 
    // etc 
} 

public class CheckBoxes 
{ 
    public string Text {get; set;} 
    public bool Checked {get; set;}   
} 
[HttpPost] 
public ActionResult controller(MyModelViewModel model) 
{ 
    foreach(var item in model.CheckBoxList) 
    { 
     if(item.Checked) 
     { 
      // do something with item.Text 
     } 
    } 
} 

基本上的ViewModels是你的朋友。您希望爲每個視圖都有一個單獨的ViewModel,並且它在Controller和View之間來回傳遞。然後,您可以在控制器中執行數據解析,或者(最好)在服務層中執行數據解析。

序號:
Should ViewModels be used in every single View using MVC?

8

我會做什麼在這種情況下是使這些項目成爲我的視圖模型的屬性。

public class MyViewModel 
{ 
    public bool text1 { set;get} 
    public bool text2 { set;get;} 
    public bool SomeMeaningFullName { set;get;} 
    // Other properties for the view 
} 

,在我取得動作的方法,我將這個視圖模型回到我查看

public ActionResult Edit() 
{ 
    MyViewModel objVM=new MyViewModel(); 
    return View(objVM); 
} 

在我看來

@model MyViewModel 

@using (Html.BeginForm("Edit","yourcontroller")) 
{ 
    @Html.LabelFor(Model.text1) 
    @Html.CheckBoxFor(Model.text1) 
    @Html.LabelFor(Model.text2) 
    @Html.CheckBoxFor(Model.text2) 

    <input type="submit" value="Save" /> 
} 

現在,這個屬性值會在您的文章操作可用方法

[HttpPost] 
public ActionResult Edit(MyViewModel objVM) 
{ 
//Here you can access the properties of objVM and do whatever 

}