私の必要性は「バインド」することです
Dictionary<MyType, bool>
asp.netmvcのチェックボックスのリストに移動します。
私はそれを達成する方法について混乱しています。誰か助けてもらえますか?
私の必要性は「バインド」することです
Dictionary<MyType, bool>
asp.netmvcのチェックボックスのリストに移動します。
私はそれを達成する方法について混乱しています。誰か助けてもらえますか?
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
送信する前に「チェックされていない」チェックボックスごとにパラメータを追加することもできます。これにより、次の値を直接導出できるため、元の辞書に入力する必要がなくなります。すべての辞書要素。