Estoy desarrollando una aplicación web ASP.Net MVC 3 y tengo algunas dificultades para obtener los valores de una lista de casillas de verificación. Ya he leído la mayoría de las preguntas sobre Stackoverflow en esta área, sin embargo, sigo teniendo algunos problemas.ASP.Net MVC 3 Recuperar valores de la lista de casillas de verificación
que tienen un modelo de vista
public class ViewModelCheckBox
{
public string Id { get; set; }
public string Name { get; set; }
public bool Checked { get; set; }
}
Otro modelo de vista que utilizan el modelo de vista por encima de
public class ViewModelAssignSubSpeciality
{
public ListItem Item { get; set; }
public IList<ViewModelCheckBox> SpecialityList { get; set; }
}
Luego, en mi regulador
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 conseguir una lista de todos los elementos posibles de la lista de casillas de verificación, y luego obtener una lista de todas las c lista de heckbox elementos para los que establece la opción marcada en verdadero.
Mi vista se ve así, girando sobre SpecialityList y creando una casilla de verificación para cada elemento, y también estableciendo su valor seleccionado en 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 HttpPost método en mi controlador tendrá el aspecto siguiente
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 para conseguir las casillas de verificación seleccionadas en
model.SpecialityList
Nos siempre nula . No estoy seguro de por qué no contiene una lista de ViewModelCheckBox.
¿Alguien puede ayudarme con esto?
Gracias.
+1 para ver modelos y plantillas de editor. –
Gran respuesta. Gracias. – tgriffiths
Interesante, he estado buscando algo como esto por algún tiempo. Gracias. –