これは、一連のチェックボックスをモデルに正しくバインドする方法に関する質問ではありませんプロパティ(一般的な質問) - 私のサイトはPOSTやGET +クエリ文字列のリクエストからチェックボックスの値を完全に読み取って動作します。ASP.NET MVCで、Html.ActionLinkで繰り返し名前( '?v = 1&v = 2&v = 3')クエリ文字列を生成する方法
これは、Html.ActionLink
を使用して、複数のチェックボックス値をクエリ文字列で正しくフォーマットするリンクを生成する方法です。
だから私は、次のモデルがあります:
public class ModelType
{
public string[] V { get; set; }
}
をそして、私は3つの値(および、はい、と値の組み合わせを)持っているように私には、たとえば、ビューでそのモデルに3つのチェックボックスをバインドします。フォームはその後、生成されたクエリ文字列は、当然のことながら、?V=1&V=2&V=3
でGETとしてサーバーに送信されたときにすべての3つの値がチェックされている場合はここ
は、最終的なHTML
<INPUT id="chk1" value="1" type="checkbox" name="V">
<INPUT id="chk2" value="2" type="checkbox" name="V">
<INPUT id="chk3" value="3" type="checkbox" name="V">
です。
モデルバインディングは美しく動作し、すべてが幸せです。
には、同じクエリ文字列を生成するために匿名型またはRouteValueDictionary
を渡して、同じアクションへのリンクをに生成したいとします。あなたはこのような何かをするだろう論理状態:
バージョン1:ビュー上のモデルとしてModelType
のインスタンスの場合:
<%= Html.ActionLink("Test link", null /* action name */, new { V = Model.V }) %>
バージョン2:配列として直接「V」メンバーを初期化:
<%= Html.ActionLink("Test link", null /* action name */,
new { V = new string[] { "1", "2", "3" } }) %>
は、[両方のケースでこれらの匿名型の両方がリンク生成が発生する前に、このようなになって取得しているので、質問では、私は
RouteValueDictionary
を言う。]
いずれの場合も、生成されるクエリ文字列は次のとおりです。?V=System.String%5B%5D
。
これは、リンクジェネレータが単に配列のToString()
を呼び出すためです。 MVCに値?V=1&V=2&V=3
を生成させる値を渡す方法はないようです。
どちらの言語は、私たちが行うことができますので、:
new { V="1", V="2", ... }
NOR RouteValueDictionaryは、私たちが行うことができます:
d["V"] = "1"; d["V"] = "2"; ...
は私もRouteValueDictionaryを前処理の必死の対策を試してみた、のためになるようにそれぞれIEnumerable<string>
、私はコンマで区切られたそれぞれの値を持つ単一の文字列を生成し、その文字列を書き戻します - クエリ文字列はこのように終わります:?V=1%2C2%2C3
。
もちろん、MVCはそのような文字列を配列に自動的にバインドしません(配列内にコンマを含む文字列を1つだけ取得します)。だから、この方法で束縛されるそれぞれの財産は、私のために飛び抜ける少数のあふれているように見えます。
だから私は立ち往生しているようです。
何か不足していますか?私がしたいことをするActionLinkの特別なバージョンを書く必要がありますか?
いつものように、大変感謝しています。