2012-01-03 3 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

왜 null 검사를 계속합니까? null 대신에 빈의 콜렉션을 돌려주는 것이 가장 좋은 방법이다. – user49126

+0

왜 그렇게 생각하니? 'null '이 빈리스트의 의미를 나타내는 것과 다른 점이 있다면? null을 전달하면 컨트롤러에 대한 단위 테스트는 어떻게됩니까? 그들은 실패 할 것이다. 공개 메소드가 있습니다.이 메소드는 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

관련 문제