2011-11-30 3 views
0

컬렉션 모음에 대한 편집 양식을 만들려고합니다. List가 null이고 ModelState를 확인할 때 Valid 속성이 "true"이고 0 키가 있습니다. 피플 엔터티에는 필수 속성이 없습니다.ASP.NET MVC 3 컬렉션에 대한 모델 바인딩이 작동하지 않습니다.

보기

@using(Html.BeginForm("UpdatePeople", "People", FormMethod.Post })) 
{ 
    @for (var i = 0; i < Model.People.Count; i++) 
    { 
     <div> 


@Html.TextBoxFor(t => t.People[i].FirstName) 



     </div> 
    } 
} 

컨트롤러 액션 방법이 당신의 ViewModel을받는 유형 List<People>의 모델을하지 수신

[HttpPost] 
public ActionResult UpdatePeople(List<People> items) 
{      
// items is null 
} 

답변

1

.

모델 정의가 표시되지 않으므로 약간의 샘플이 있습니다.

List<People> 유형의 People이라는 특성을 가진 모델이있는 것 같습니다.

public class MyViewModel 
{ 
    public List<People> People { get; set; } 
    // other properties 
} 

양식을 제출하면 MVC가 바인딩을 시도합니다. 귀하의 액션 메소드는이

List<People> 

하지만 전송 MyViewModel를 수신했다. 당신이

[HttpPost] 
public ActionResult UpdatePeople(MyViewModel model) 
{      
    // model.People exists 

} 

로 작용 방법을 변경하는 경우

그래서 작동합니다.

ViewModel에 하나의 특성이있는 경우 People이 모델은 필요하지 않습니다. List<Person>을보기로 전달할 수 있습니다.

희망이 액션 메소드는 요청과 함께 전송 된 내용으로 일치 할 수 있도록 전달 된 어떤 바인딩됩니다

+0

하는 데 도움이됩니다. 뷰로 전달 된 뷰 모델 일 필요는 없습니다. 임의의 특성이거나 특성이 매개 변수 이름과 일 치하는 모델 클래스 일 수 있습니다. –

+0

예 ModelBinder의 작동 방식을 알고 있습니다. 그러나 이것이 여기의 문제입니다. 당신 말이 맞아요, 아마도 내가 이것을 더 분명하게해야합니다. – dknaack

관련 문제