mvc example asp.net-mvc-3 checkbox viewmodel checkboxlist

example - ASP.Net MVC 3 Recuperar valores de lista de casillas de verificación



checkbox mvc model (2)

Es porque le dio a la casilla de verificación el nombre @item.Name . El clasificador de modelo verificará si puede asignarlo a una propiedad particular en el modelo, pero no puede encontrarlo porque está buscando el valor de @item.Name y no de la propiedad de SpecialtyList .

Phil Haack tiene un buen artículo sobre el modelo de encuadernación a una lista. Sugiero que verifique uno.

Además, no creo que pueda modelar bind a un objeto personalizado, porque los valores de las casillas de verificación que entran son solo cadenas. Debería hacer otra propiedad en su modelo que sea de tipo IEnumerable a la cual los valores de las casillas de verificación estén vinculados por modelo. Se vería así:

public IList<ViewModelCheckBox> SpecialityList { get; set; } public IEnumerable<string> SpecialityListValues { get; set; }

De esta forma puede usar SpecialityList para completar los valores en la vista y SpecialityListValues para recuperar los valores. Tenga en cuenta que el nombre de las casillas de verificación debe corresponderse con SpecialityListValues .

Estoy desarrollando una aplicación web ASP.Net MVC 3 y tengo algunas dificultades para obtener los valores de una lista de casilla 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 viewmodel 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 de arriba está obteniendo una lista de todos los elementos posibles de la lista de casillas de verificación, y luego obtiene una lista de todos los elementos de la lista de casillas seleccionados previamente para los cuales 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 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 trato de obtener las casillas de verificación seleccionadas en

model.SpecialityList

Nos siempre nulo. No estoy seguro de por qué no contiene una lista de ViewModelCheckBox.

¿Puede alguien ayudarme con esto?

Gracias.


Tengo un enumerable de estos en mi modelo de vista

public class CheckBoxItem { public string Code { get; set; } public bool IsChecked { get; set; } public string Label {get;set;} }

Luego uso una plantilla de editor para mostrarlos en la página.

<p class="checkbox" style="display:inline"> <span style="margin-left:5px;"> @Html.HiddenFor(x => x.Code) @Html.CheckBoxFor(x => x.IsChecked) </span> @Html.LabelFor(x => x.IsChecked, Model.Label) </p>

En la vista, uso lo siguiente para mostrarlos en la página.

@Html.EditorFor(m => m.MyEnumerableOfCheckBoxItem)

Cuando se reenvía el formulario, el modelo está correctamente encuadernado.

Espero que esto ayude.