Моя потребность в 'связывать'Как мне привязать словарь к набору флажков с помощью ASP.NET MVC?
Dictionary<MyType, bool>
в список флажков в ASP.NET MVC.
Я смущен о том, как это сделать. Может ли кто-нибудь мне помочь?
Моя потребность в 'связывать'Как мне привязать словарь к набору флажков с помощью ASP.NET MVC?
Dictionary<MyType, bool>
в список флажков в ASP.NET MVC.
Я смущен о том, как это сделать. Может ли кто-нибудь мне помочь?
Предполагая, что MyType имеет строковое свойство с именем Name
, из которого вы получите имя этого флажка. Обратите внимание, что я изменил это, чтобы предисловие это с MyType
, поэтому мы можем легко отличить его на сервере. Вам может не понадобиться этот шаг, если у вас есть другой способ определить, какие поля являются флажками.
<% foreach (var pair in model.ChecboxDictionary) { %>
<%= Html.CheckBox("MyType." + pair.Key.Name, pair.Value) %>
<% } %>
контроллер (это использует FormParameters, но вы также можете попробовать модель связывания с префиксом «MyType» непосредственно к Dictionary<string,bool>
, а затем перевести.
public ActionResult MyAction(FormParameters form)
{
var dict = ... fill dictionary with original values...
foreach (var key in dict.Keys)
{
if (!form.Keys.Contains("MyType." + key.Name))
{
dict[key] = false;
}
}
foreach (var key in form.Keys.Where(k => k.StartsWith("MyType.")))
{
var value = form[key].Contains("on"); // just to be safe
// create or retrieve the MyType object that goes with the key
var myType = dict.Keys.Where(k => k.Name == key).Single();
dict[myType] = value;
}
...
}
Вы могли бы также, с небольшим количеством на Javascript клиентская сторона, добавьте name=off
параметров для каждого из «непроверенных» флажков перед отправкой, и это устранит необходимость заполнения исходного словаря, так как вы сможете напрямую выводить значения для всех элементов словаря.
Так далеко я тоже знаю. Теперь мне нужно передать эти данные (с измененными значениями bool) обратно на контроллер. Подходит ли ваш подход к этому, и я просто делаю что-то неправильно или не включает эту часть? –
Я вижу. Я обновляю свой ответ с помощью одной идеи. – tvanfosson
И вот в чем вопрос - как заставить привязать модель к работе. Извините за мою неопределенность. –