2012-02-19 2 views
3

여러 모델을 컨트롤러에 다시 게시하는 MVC보기가 있습니다. 나는 사용자가 동일한 형태의 "위반"X 번호를 추가 할 수 있도록하는 기능을 추가해야한다는 요구 사항이 있습니다. 내가하고 싶은 일은 IEnumerable의 "위반"개체를 컨트롤러에 게시하는 것과 비교할 수 있습니다. 이 작업을 수행 할 수있는 방법이 있다면 그것은 좋은 것 : 나는 다음을 IEnumerable을 반복하여 위반을 추가하나 이상의 모델 인스턴스를 동일한 형식으로 컨트롤러에 전달할 수 있습니까?

[HttpPost] 
public ActionResult Create(IEnumerable<Infractions> infractions) 

.

제안 사항?

답변

2

확실히 가능합니다. 이 문제에 대해서는 Phil Haack's post을 참조하십시오.

트릭은 모델 바인더가 목록/배열로 인식 할 수 있도록 초기 get 속성 이름을 올바른 형식으로 렌더링하는 것입니다. 예를 들어

:

<input type='text' name='[0].Property1OnInfractions' /> 
<input type='text' name='[0].Property2OnInfractions' /> 

<input type='text' name='[1].Property1OnInfractions' /> 
<input type='text' name='[1].Property2OnInfractions' /> 
당신이이 일을 다음 얻을은 IList로는 IEnumerable을 변환해야합니다 귀하의 경우


:

@for(int i = 0; i < Model.Count(); i++) 
{ 
    @Html.TextBoxFor(m => m[i].Property1OnInfractions) 
    @Html.TextBoxFor(m => m[i].Property2OnInfractions) 
} 

그리고 행동의 서명이

과 같아야합니다
[HttpPost] 
public ActionResult Create(List<Infractions> infractions) 
+0

다음과 같이 서명하지 않는 것이 좋을 것입니다.' public ActionResult Create (IList 위반)'? –

+0

@jimtollan, 원래 코드는 HttpPost에서 여전히 작동하지만'List'에 대한 내 대답을 편집하는'IEnumerable'으로 더욱 일반화되었습니다 :( –

관련 문제