2012-01-03 58 views
4

IList型のパラメータを持つアクションメソッドがいくつかあります。ASP.NET MVC - パラメータがnullのときに空のコレクションをバインドします。

public ActionResult GetGridData(IList<string> coll) 
{ 
} 

デフォルトの動作では、データがアクションメソッドに渡されない場合、パラメータはnullです。

アプリケーション全体ではなく空のコレクションを取得する方法はありますか?

coll = coll ?? new List<string>(); 

それとも、nullを返す代わりに空のリストを作成しますModelBinderを実装する必要があります:

答えて

5

さて、あなたはこれを行うことがどちらかそれを行います。例:

public EmptyListModelBinder<T> : DefaultModelBinder 
{ 
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 
    var model = base.BindModel(controllerContext, bindingContext) ?? new List<T>(); 
    } 
} 

としてアップ有線:

ModelBinders.Binders.Add(typeof(IList<string>), new EmptyListModelBinder<string>()); 

私はおそらくかかわらず、引数のチェックに固執したい...

残念ながら
+1

なぜあなたはヌルチェックに固執しますか?ヌルの代わりに空のコレクションを返すのがベストプラクティスです。 – user49126

+0

なぜそれをお考えですか? '空のリストが何を表しているのかを' null 'が表すのに違いがある場合はどうなりますか? nullを渡すと、コントローラのユニットテストではどうなりますか?彼らは失敗するでしょう。 publicメソッドを持っています。これはAPIの一部です。つまり、これらの入力を引数でチェックする必要があります。私は、空のリストがnullよりも優れていることを示すガイドラインを覚えていません... –

+0

ここを見てくださいhttp://stackoverflow.com/questions/1969993/is-it-better-to-return-null-or-空のコレクション – user49126

1

は単に自分が

public ActionResult GetGridData(IList<string> coll) 
{ 
    if(coll == null) 
     coll = new List<String>(); 
    //Do other stuff 
} 
+0

動作しません、新しいリスト( 'ので、 ) 'はコンパイル時定数ではありません。 –

+0

よろしいですか?私はそれを知らなかった。このチップをありがとう。 – Maheep

+0

混乱を避けるための最初の解決策を削除しました。 – Maheep

関連する問題