Sto sviluppando un'applicazione Web ASP.Net MVC 3 e sto riscontrando alcune difficoltà nell'ottenere i valori da una checkboxlist. Ho già letto la maggior parte delle domande su Stackoverflow in quest'area, tuttavia ho ancora alcuni problemi.ASP.Net MVC 3 Recupera i valori dell'elenco di caselle di controllo
Ho un ViewModel
public class ViewModelCheckBox
{
public string Id { get; set; }
public string Name { get; set; }
public bool Checked { get; set; }
}
Un'altra ViewModel che utilizzano il ViewModel sopra
public class ViewModelAssignSubSpeciality
{
public ListItem Item { get; set; }
public IList<ViewModelCheckBox> SpecialityList { get; set; }
}
Poi, nel mio 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);
}
Il codice nel controller sopra è sempre una lista di tutti gli elementi dell'elenco di caselle di controllo possibili, quindi ottenere un elenco di tutti i c selezionati in precedenza heckbox elenca gli elementi per i quali imposta l'opzione selezionata su true.
La vista personale è simile a questa, scorre su SpecialityList e crea una casella di controllo per ciascun elemento e imposta il valore selezionato su true se necessario.
<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" />
mio HttpPost metodo in mio controller appare allora come questo
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 });
}
Tuttavia, quando si tenta di ottenere le caselle selezionate in
model.SpecialityList
Ci sempre null . Non sono sicuro del motivo per cui non contiene un elenco di ViewModelCheckBox.
Qualcuno può aiutarmi per favore con questo?
Grazie.
+1 per modelli di viste e modelli di editor. –
Ottima risposta. Grazie. – tgriffiths
Interessante, ho cercato qualcosa di simile per un po 'di tempo. Grazie. –