ASP.Net MVC 3 Recuperar valores de lista de casillas de verificación
Estoy desarrollando una aplicación web ASP.Net MVC 3 y tengo algunas dificultades para obtener los valores de una lista de verificación. Ya he leído la mayoría de las preguntas sobre Stackoverflow en esta área, sin embargo, todavía tengo algunos problemas.
Tengo un ViewModel
public class ViewModelCheckBox
{
public string Id { get; set; }
public string Name { get; set; }
public bool Checked { get; set; }
}
Otro ViewModel que usa el modelo de vista arriba
public class ViewModelAssignSubSpeciality
{
public ListItem Item { get; set; }
public IList<ViewModelCheckBox> SpecialityList { get; set; }
}
Entonces en mi controlador
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);
}
El código en el controlador anterior es obtener una lista de todos los elementos posibles de la lista de casillas de verificación, y luego obtener una lista de todos los elementos de la lista de casilla de verificación seleccionados previamente para los que establece la opción marcada en verdadero.
My View entonces se ve así, recorriendo la SpecialityList y creando una casilla de verificación para cada elemento, y también configurando su valor seleccionado como verdadero si es necesario.
<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" />
Mi método HttpPost en mi controlador se ve así
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 });
}
Sin embargo, cuando intento obtener las casillas seleccionadas en
model.SpecialityList
Siempre somos nulos. No estoy seguro de por qué no contiene una lista de ViewModelCheckBox.
¿Puede alguien ayudarme con esto?
Gracias