ASP.Net MVC 3 Recuperar valores da lista de caixas de seleção
Estou desenvolvendo um aplicativo Web do ASP.Net MVC 3 e estou tendo algumas dificuldades em obter os valores de uma lista de verificação. Eu já li a maioria das perguntas sobre o Stackoverflow nessa área, no entanto, ainda estou tendo alguns problema
Tenho um ViewModel
public class ViewModelCheckBox
{
public string Id { get; set; }
public string Name { get; set; }
public bool Checked { get; set; }
}
Outro ViewModel que usa o viewmodel acima
public class ViewModelAssignSubSpeciality
{
public ListItem Item { get; set; }
public IList<ViewModelCheckBox> SpecialityList { get; set; }
}
Então no meu 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);
}
O código no controlador acima está recebendo uma lista de todos os itens possíveis da lista de caixas de seleção e, em seguida, uma lista de todos os itens da lista de caixas de seleção selecionados anteriormente para os quais define a opção marcada como verdadeir
O My View fica assim, percorrendo a SpecialityList e criando uma caixa de seleção para cada item, além de definir o valor selecionado como true, se necessári
<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" />
método @ My HttpPost no meu controlador se parece com isso
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 });
}
No entanto, quando tento obter as caixas de seleção selecionadas em
model.SpecialityList
Nós sempre nulos. Não sei por que ele não contém uma lista de ViewModelCheckBox.
Alguém por favor pode me ajudar com isso
Obrigado