Próbuję modelować powiązać zestaw generowanych dynamicznie pola wyboru tak, aby przetworzyć je w akcji kontrolera, ale nie można uzyskać wiążącej do modelu pojawić się. To jest scenariusz:ASP.NET MVC - model wiążących zestaw wyboru generowanych dynamicznie - jak
Moja klasa ViewModel (DocumentAddEditModel) zawiera słownik (Słownik < ciąg, bool>) z ciągiem każdego wpisu będącego nazwą/etykietą dla każdego pola wyboru i wartością logiczną wskazującą, czy pole wyboru jest zaznaczone:
public class DocumentAddEditModel
{
...
private Dictionary<string, bool> _categoryCheckboxes = new Dictionary<string,bool>();
...
...
public Dictionary<string, bool> CategoryCheckboxes
{
get { return _categoryCheckboxes; }
set { _categoryCheckboxes = value; }
}
...
}
}
w moim kontroler akcji, który obsługuje żądania GET dla formularza zapełnia dictonary następująco:
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);
}
}
w widoku mam następujący generować pola wyboru:
<% 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>
<% } %>
ale myślę, że to tutaj musi być problem. Nie wiem, co musi być w atrybucie nazwy. Problem polega na tym, że gdy pisał z powrotem do następującej metody działania w DocumentsController:
[RequiresAuthentication]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Add(DocumentAddEditModel documentAddEditModel)
{
...
}
documentAddEdit.Model.CategoryCheckboxes zawsze ma wartość null. Jak mogę to ustawić tak, że słownik CategoryCheckboxes jest prawidłowo wypełniona nazwy i sprawdzone/niezaznaczone wartość bool dla pola wyboru?
Dzięki
Dzięki eu-ge-ne, które wydaje się zrobić podstęp, czy mógłbyś wyjaśnić, co tu się dzieje? Rozumiem, że ponieważ kontrolka checkbox ( Matthew
znowu sobie sprawę, że w HTML.CheckBox() htmlhelper generuje drugie ukryte pole z atrybutem nazwy równym atrybutowi widocznego pola wyboru, ale gdy porównuję wygenerowany html dla pola wyboru, gdy nie jest zaznaczone: – Matthew
– Matthew