2012-03-25 17 views
4

Ich bin neu in MVC3 und ich kann nicht herausfinden, wie Sie Kontrollkästchen in MVC verwenden. Ich habe eine Reihe von Text in meiner Ansicht wieMVC3 - Wie verwende ich @ html.checkbox richtig?

text1 
text2 
text3 
text4 
text5 

submitbutton 

Dieser Text nicht zu jedem Modell seines nur Klartext verwendet ist. Ich möchte ein Kontrollkästchen für jedes Element und eine Verknüpfung mit dem Controller, so dass, wenn ein Benutzer einige der Kontrollkästchen Werte und klickt auf die Schaltfläche "Senden" meine Controller wählt, welche Elemente ausgewählt wurden. Ich versuchte @ Html.CheckBox mit („text“ + Index) und versuchte, den Controller

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

Aber das nicht abholen die Liste der ausgewählten Elemente zu sein. Kannst du mir sagen, was ich falsch mache oder auf eine andere Art und Weise?

+1

Sie sollten erstellen ein ViewModel, das eine boolesche Eigenschaft und eine Zeichenfolgeneigenschaft verknüpft. ViewModels sind dein Freund. –

Antwort

6

Erstellen Sie ein ViewModel mit all Ihren Werten. Füllen Sie das ViewModel auf und senden Sie es an die Ansicht. Wenn etwas überprüft wird, wissen Sie, was auf dem Post steht.

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

Grundsätzlich sind Viewmodels dein Freund. Sie möchten für jede Ansicht ein separates ViewModel haben, das zwischen dem Controller und der View hin- und hergereicht wird. Sie können dann Ihre Datenanalyse entweder im Controller oder (vorzugsweise) in einer Service-Schicht durchführen.

Weitere Referenz:
Should ViewModels be used in every single View using MVC?

8

Was ich in dieser Situation tun würde, ist diese Elemente zu machen eine Eigenschaft meiner Ansichtsmodell sein.

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

und in Verfahren meiner Get Action-i werde dieses Ansichtsmodell meiner Ansicht zurückzukehren

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

und in meiner Ansicht

@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" /> 
} 

Jetzt wird diese Eigenschaft Wert in Ihrem Beitrag Aktion zur Verfügung steht Methode

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

} 
Verwandte Themen