3

私の必要性は「バインド」することです

Dictionary<MyType, bool> 

asp.netmvcのチェックボックスのリストに移動します。

私はそれを達成する方法について混乱しています。誰か助けてもらえますか?

4

1 に答える 1

3

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送信する前に「チェックされていない」チェックボックスごとにパラメータを追加することもできます。これにより、次の値を直接導出できるため、元の辞書に入力する必要がなくなります。すべての辞書要素。

于 2009-06-07T16:14:30.737 に答える