2011-01-04 2 views
2

View의 Person 폴더 내에 PersonController와 View라는 "Person"이라는 뷰가 있습니다.Html.RenderAction은 잘못된 ModelState에 대한 MVC2의 컨트롤러에서 작업을 찾을 수 없습니다.

추가보기는 제목, 이름, 성 및 전화 번호를 사용합니다. 제목은 미리 채워진 값이있는 드롭 다운 목록입니다. 이 드롭 다운 목록을 얻으려면

<% Html.RenderAction("Titles", "Person"); 

해당 작업이 호출되면 PartialView가 반환됩니다. PartialView는 미리 구성된 제목의 드롭 다운 목록입니다.

시나리오 :

내가 "추가"라는 두 개의 컨트롤러 액션 (하나 개 GET, 하나의 포스트)를 가지고있다. HttpGet에서 제목, 빈 텍스트 상자 등의 드롭 다운 목록과 함께 기본적으로 빈 양식을로드합니다. 사용자가 업로드 버튼을 클릭하면 "추가"HttpPost가 호출됩니다. 이 작업의 내부에서, 나는 그들이 필요한 필드가 비어 있으면 내가 ModelState에 오류를 추가하는 등 필드, 작성 확인하고, 몇 가지 유효성 검사를 수행합니다 modelstate이 유효하지 않은 경우

if(string.IsNullOrEmpty(firstName)) 
{ 
    ModelState.AddModelError("person", "Person first name is required."); 
} 

을, 보기를 반환하므로 사용자는 유효성 검사 오류 메시지를 볼 수 있습니다.

ModelState가 유효하면 Action이 올바르게 렌더링되지만 오류가 있고 ModelState에 오류를 추가하고 HttpPost 액션에서 View를 반환하면 HttpException이 뷰에서 throw됩니다.

Error executing child request for handler 'System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerAsyncWrapper'. 

"제목"이라는 작업을 "사람"컨트롤러에서 찾을 수 없음을 알립니다. 분명히 나는 ​​거기에 있다는 것을 알고있다. ModelState에 오류가 있기 전에 잘 실행 되었기 때문이다.

아이디어가 있으십니까?

답변

0

하위 작업은 처음 호출 된 기본 작업과 동일한 HTTP 메서드를 사용하여 호출됩니다.

따라서 /Person/Titles 동작에 [HttpGet] 태그가 지정되어 있다고 가정합니다. 이걸 제거하면 제대로 작동합니다.

관련 문제