ASP.Net MVC 3 Получить значения списка флажков
Я занимаюсь разработкой веб-приложения ASP.Net MVC 3, и у меня возникают трудности с получением значений из списка флажков. Я уже прочитал большинство вопросов о Stackoverflow в этой области, однако у меня все еще есть некоторые проблемы.
У меня есть ViewModel
public class ViewModelCheckBox
{
public string Id { get; set; }
public string Name { get; set; }
public bool Checked { get; set; }
}
Другая ViewModel, которая использует вышеупомянутую модель
public class ViewModelAssignSubSpeciality
{
public ListItem Item { get; set; }
public IList<ViewModelCheckBox> SpecialityList { get; set; }
}
Тогда в моем контроллере
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);
}
Код в вышеприведенном контроллере получает список всех возможных элементов списка флажков, а затем получает список всех ранее выбранных элементов списка флажков, для которых он устанавливает для параметра флажка значение true.
Мой вид тогда выглядит следующим образом, перебирая SpecialityList и создавая флажок для каждого элемента, а также устанавливая его выбранное значение в true, если это необходимо.
<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" />
Мой метод HttpPost в моем контроллере выглядит следующим образом
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 });
}
Тем не менее, когда я пытаюсь получить выбранные флажки в
model.SpecialityList
Это нам всегда ноль. Я не уверен, почему он не содержит список ViewModelCheckBox.
Может кто-нибудь помочь мне с этим?
Спасибо.