Я пытаюсь моделировать привязку набора динамически генерируемых флажков, чтобы обрабатывать их в действии контроллера, но не может получить привязку модели. Это сценарий:
В моем классе ViewModel (DocumentAddEditModel) содержится словарь (Dictionary < string, bool > ), причем строка каждой записи является именем/меткой для каждого флажка, а логическое значение указывает, установлен ли флажок:
public class DocumentAddEditModel
{
...
private Dictionary<string, bool> _categoryCheckboxes = new Dictionary<string,bool>();
...
...
public Dictionary<string, bool> CategoryCheckboxes
{
get { return _categoryCheckboxes; }
set { _categoryCheckboxes = value; }
}
...
}
}
В моем контроллере действие, которое обрабатывает запрос GET для формы, заполняет запрос следующим образом:
public class DocumentsController : Controller
{
[RequiresAuthentication]
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Add()
{
DocumentAddEditModel documentAddEditModel = new DocumentAddEditModel();
...
Dictionary<string, bool> categoryCheckboxes = new Dictionary<string, bool>();
...
string[] categories = Enum.GetNames(typeof(Category));
foreach (string category in categories)
categoryCheckboxes.Add(category, false);
documentAddEditModel.CategoryCheckboxes = categoryCheckboxes;
return View(documentAddEditModel);
}
}
Внутри представления у меня есть следующее, чтобы сгенерировать флажки:
<% foreach (KeyValuePair<string, bool> categoryCheckbox in ViewData.Model.CategoryCheckboxes)
{%>
<input class="checkbox" type="checkbox" name="CategoryCheckboxes[0].Key" id="<%= categoryCheckbox.Key %>" />
<label class="categoryLabel" for="<%= categoryCheckbox.Key %>"><%= categoryCheckbox.Key %></label>
<% } %>
но я думаю, что в этом проблема должна быть. Не уверен, что должно происходить в атрибуте name. Проблема заключается в том, что однажды отправленный обратно в следующий метод действий в DocumentController:
[RequiresAuthentication]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Add(DocumentAddEditModel documentAddEditModel)
{
...
}
documentAddEdit.Model.CategoryCheckboxes всегда имеет значение null. Как настроить это так, чтобы словарь CategoryCheckboxes был правильно заполнен именем и отмеченным/непроверенным значением bool для флажков?
Спасибо