Zajmuję się tworzeniem aplikacji sieci Web ASP.Net MVC 3 i mam pewne trudności z uzyskaniem wartości z listy wyboru. Przeczytałem już większość pytań na temat Stackoverflow w tym obszarze, jednak nadal mam pewne problemy.ASP.Net MVC 3 Odzyskaj wartości listy checkbox
mam ViewModel
public class ViewModelCheckBox
{
public string Id { get; set; }
public string Name { get; set; }
public bool Checked { get; set; }
}
Innym ViewModel które wykorzystują ViewModel powyżej
public class ViewModelAssignSubSpeciality
{
public ListItem Item { get; set; }
public IList<ViewModelCheckBox> SpecialityList { get; set; }
}
potem w moim kontroler
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);
}
kod w sterowniku powyżej jest coraz listę wszystkich możliwych pozycji na liście wyboru, a następnie uzyskanie listy wszystkich wcześniej wybranych c heckbox elementy listy, dla których ustawia sprawdzoną opcję na true.
Mój widok wygląda następująco: zapętla się w SpecialityList i tworzy pole wyboru dla każdego elementu, a także ustawia jego wybraną wartość na true, jeśli zajdzie taka potrzeba.
<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" />
My HttpPost metoda w moim kontroler wtedy wygląda to
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 });
}
jednak, gdy próbuję dostać wybranych pól wyboru w
model.SpecialityList
Jest nam zawsze zerowej . Nie jestem pewien, dlaczego nie zawiera listę ViewModelCheckBox.
Czy ktoś może mi w tym pomóc?
Dziękuję.
+1 dla modeli widoków i szablonów edytora. –
Świetna odpowiedź. Dziękuję Ci. – tgriffiths
Ciekawe, od jakiegoś czasu szukałem czegoś takiego. Dzięki. –