Ich entwickle eine ASP.Net MVC 3-Webanwendung, und ich habe einige Schwierigkeiten mit dem Abrufen der Werte aus einer Checkboxliste. Ich habe bereits die meisten Fragen zu Stackoverflow in diesem Bereich gelesen, habe aber immer noch Probleme.ASP.Net MVC 3 Abrufen von Checkbox-Listenwerten
Ich habe ein Viewmodel
public class ViewModelCheckBox
{
public string Id { get; set; }
public string Name { get; set; }
public bool Checked { get; set; }
}
Ein weiteres Ansichtsmodell, das das Ansichtsmodell verwendet oben
public class ViewModelAssignSubSpeciality
{
public ListItem Item { get; set; }
public IList<ViewModelCheckBox> SpecialityList { get; set; }
}
Da ist in meinem Controller
public ActionResult AssignSubSpeciality(int id)
{
//Get a list of all sub-specialities
var SpecialityList = _listService.GetListItemsByID(3).ToList();
//Get a list of sub-specialities for the the passed in id, this is either the id of a speciality or grade
IList<RelationshipSpecialitySub> assignedSpecialities = _listService.GetAssignedSubSpecialities(id).ToList();
var checkBoxList = new List<ViewModelCheckBox>();
foreach (ListItem item in SpecialityList)
{
ViewModelCheckBox chkBox = new ViewModelCheckBox { Id = item.listItemID.ToString(), Name = item.description };
//If sub-speciality exists in assignedSpecialities list, then make checkbox checked
foreach (var specilaity in assignedSpecialities)
{
if (specilaity.subID == item.listItemID)
{
chkBox.Checked = true;
}
else
{
chkBox.Checked = false;
}
}
checkBoxList.Add(chkBox);
}
ViewModelAssignSubSpeciality viewModel = new ViewModelAssignSubSpeciality();
viewModel.ListItem = _listService.GetListItemByID(id);
viewModel.SpecialityList = checkBoxList;
return View(viewModel);
}
Der Code in der Steuerung über eine Liste bekommen von allen möglichen Checkbox-Listenelementen, dann Abrufen einer Liste aller zuvor ausgewählten c heckbox listet Elemente auf, für die die Option checked auf true gesetzt ist.
Meine Ansicht sieht dann folgendermaßen aus: Schleife über die SpecialityList und Erstellen eines Kontrollkästchens für jedes Element und Festlegen des ausgewählten Werts auf true, falls erforderlich.
<fieldset>
<legend>Specialities</legend>
@foreach (var item in Model.SpecialityList)
{
<input type="checkbox" id="@item.Id" name="@item.Name" value="@item.Id" @(item.Checked ? "checked" : "") />
<label for="@item.Id">@item.Name</label><br />
}
<input type="submit" value="Save Changes" class="sepH_b" />
Meine Httppost Methode in meinem Controller sieht dann aus wie diese
public ActionResult AssignSubSpeciality(ViewModelAssignSubSpeciality model)
{
//delete all sub-specialities in tbl relationshipSpecialitySub for List
foreach (ViewModelCheckBox item in model.SpecialityList)
{
//_listService.DeleteSubSpecialityFromSpeciality(item.Id);
}
return RedirectToAction("ListItems", new { id = model.ListItem.listID });
}
aber wenn ich versuche, in die Kontrollkästchen zu bekommen
model.SpecialityList
Es uns immer null . Ich bin mir nicht sicher, warum es keine Liste von ViewModelCheckBox enthält.
Kann mir bitte jemand dabei helfen?
Vielen Dank.
+1 für Ansicht Modelle und Editor-Vorlagen. –
Große Antwort. Vielen Dank. – tgriffiths
Interessant, ich habe seit einiger Zeit etwas genau so gesucht. Vielen Dank. –