2012-03-26 7 views
0

ich folgendes AnsichtsmodellMVC3 kann nicht an den Controller-Modell zurück

public class RecommendationModel 
{ 
    public List<CheckBoxItem> CheckBoxList { get; set; } 

} 

public class CheckBoxItem 
{ 
    public string Text { get; set; } 
    public bool Checked { get; set; } 
    public string Link { get; set; } 
} 

haben mit der folgenden Ansicht

model Sem_App.Models.RecommendationModel 

@using (Html.BeginForm()) 
{ 
     for (int i = 0; i < Model.CheckBoxList.Count(); i++) { 
     @Html.CheckBoxFor(m => m.CheckBoxList[i].Checked) 
     @Html.DisplayFor(m => m.CheckBoxList[i].Text)     
} 
<input type="submit" value="Add To Playlist" /> 
} 

Mit den folgenden Controller-Aktionen

//get 
public ActionResult Recommendation() 
{ 
    RecommendationModel model = new RecommendationModel(); 
    model.CheckBoxList = new List<CheckBoxItem>(); 
    return PartialView(model); 
} 

//post 
[HttpPost] 
public ActionResult Recommendation(RecommendationModel model) 
{ 
     foreach (var item in model.CheckBoxList) 
     { 
      if (item.Checked) 
      { 
       // do something with item.Text 
      } 
     } 
} 

Problem ist, wenn ich einige Elemente auswähle und die Übermittlungsschaltfläche drücke, hat das zurückgegebene Modell CheckBoxList als leer. Wie kann ich meine Ansicht ändern, um die Liste der CheckBoxList zurückzugeben? Der Versuch, @Html.HiddenFor(m => m.checkBoxList) nicht

Antwort

0

Versuchen Sie, den Link als ein verstecktes Feld: @Html.HiddenFor(m => m.CheckBoxList[i].Link)

+0

nee, das funktioniert! aber jetzt bekomme ich CheckBoxItem.Link und CheckBoxItem.Text Nullen in meinem Controller keine Ahnung warum? Ich habe meinen Controller aktualisiert – user972616

+0

Werfen Sie einen Blick auf den HTML-Code, den "DisplayFor" ausgibt, [diese Methode rendert einen String, der den Eigenschaftswert darstellt.] (Http://msdn.microsoft.com/en-us/library/ee407390%28v = vs.98% 29.aspx) Beim POST des Formulars wird dieser Wert nicht wie andere Formulareingaben (und ausgeblendete Felder) an den Controller gesendet. MVC muss das Modell aus bekannten Daten in diesem Beitrag rekonstruieren ... Denken Sie daran, dass MVC zustandslos ist (Goodbye Viewstate). – felickz

0

prüfen, wie der Kontrollkästchen Eingabename im gerenderten html ist und auch zu prüfen, das Formular Aktion sendet an die corrent Controller/Aktion und die Methode Post

es etwas für mich arbeiten soll sehr einfach .. die Aktion param als Array mit dem gleichen Namen des „name“ -Attribut Form Kontrollkästchen Eingabe

schaffen so etwas wie dieses Hinzufügen

[HttpPost] 
    public ActionResult Delete(int[] checkName) 
{ 

} 
1

Ich glaube, Sie so etwas wie dieses

@using (Html.BeginForm()) 
{ 
     for (int i = 0; i < Model.CheckBoxList.Count(); i++) { 
     @Html.CheckBoxFor("Model.CheckBoxItem[" + i + "].Checked" , m => m.CheckBoxList[i].Checked) 
     @Html.DisplayFor("Model.CheckBoxItem[" + i + "].Text",m => m.CheckBoxList[i].Text)     
} 
Verwandte Themen