Как привязать словарь к набору флажков, используя ASP.NET MVC? - PullRequest
2 голосов
/ 07 июня 2009

Мне нужно «связать»

Dictionary<MyType, bool> 

к списку флажков в asp.net mvc.

Я не понимаю, как этого добиться. Кто-нибудь может мне помочь?

1 Ответ

3 голосов
/ 07 июня 2009

Предполагая, что 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 параметры для каждого из «непроверенных» флажков перед отправкой, что избавит от необходимости заполнять исходный словарь, так как вы сможете непосредственно выводить значения для всех элементов словаря.

...