2016-10-11 8 views
0

C#ASP.NET MVCプロジェクトでは、Dictionary<string, T>Tの型はそれほど重要ではない、と私は考える)をパラメータとして受け取るアクションがある。また、そのパラメータを任意に設定して、デフォルト値のnullを設定します。辞書<string, T>がすべてのクエリ文字列パラメータにバインドされないようにする

しかし、アクションを呼び出すときにそのパラメータを指定しないと、それでも辞書はすべてのクエリ文字列のキーと値のペアで満たされます。

MVCフレームワークは、クエリ文字列にパラメータをバインドしようとします。また、文字列キーを含む辞書であるため、クエリ文字列のキーと値のペアのコレクションは、データバインディングメカニズム。

しかし、とにかくnullパラメータを受け取れるようにする必要があります。そして、私は明示的に経路の値にnullを渡すことは許されていません。クエリ文字列のデータバインディングが発生しないようにするにはどうすればよいですか?

+0

コントローラ署名のサンプルコードと不要なバインディングをトリガーするリクエストを提供できますか?どのバージョンの.NetとMVCをお使いですか? –

答えて

2

の代わりにあなたの辞書としてモデルのparamを定義するには、これは確かにランダムなクエリ文字列パラメータにバインドされませんでした

ModelClass { 
    string SomeName {get;set;} 
    T Internal {get;set;} 
} 

public ActionResult YourAction(ModelClass boundInstance){} 

よう

何かを結合より明示的に必要となるモデルを作成します。ただし、オプションのパラメータとして定義されたモデルオブジェクトは、決して空ではありません。クエリー文字列パラメータがない場合でも、空のデータを持ちますが、Dic()は空になります。デフォルトのモデルバインダーは、データをバインドしようとする前にパラメータの空のコンストラクタを呼び出して、データがバインドされていなくてもオブジェクトが構築されるようにします。

その他のオプション - ポストから辞書データを取得する上で、あなただけの計画は、あなたが結合

public ActionResult YourAction([FromBody]Dictionary<string, T> boundInstance){} 

暴言に[FromBody]属性を追加することができた場合:アクションパラメータとしてジェネリックコレクション型を使用しないでくださいとのことができます。これらの問題を完全に避けてください。

+0

私はあなたのソリューションが唯一の解決策であることを恐れています:-(正しい方向に私を向けるとありがとう、常に構築されているアクションパラメータについてのヒント! – Simone

関連する問題