문제

모든 미리보기 릴리스에서 MVC에 관한 모든 정보와 하나의 공식 릴리스 사이의 혼란으로 인해 viewusercontrols를 다루는 방법이 매우 혼란 스럽습니다. 따라서 한 번 에이 예제를 구현하는 방법을 알려주십시오.

내 웹 사이트의 여러 페이지에 표시 해야하는 다가오는 이벤트 목록이 있습니다. 따라서 내보기 공유 폴더 내에 새로운 viewusercontrol (listevents.ascx)을 넣었습니다.

이 listevents.ascx를 요청하고 있습니다.

<p>
    Here's a list of events:
    <% Html.RenderPartial("ListEvents");%>
</p>

이 ViewuserControl에 모델을 전달하는 방법은 무엇입니까? 나는 이것을 할 수 있다는 것을 안다 :

<p>
    Here's a list of events:
    <% Html.RenderPartial("ListEvents", (new Model.Services.EventService(null)).ListEvents());%>
</p>

그러나 그것은 매우 똑똑한 일처럼 보이지 않습니다. 내부에서 새로운 모델을 만들었습니까?! 아니면 여기서 틀렸어? ValidationState도 통과 할 수 없으므로 NULL 매개 변수입니다. 따라서 대안적인 옵션은이 데이터를 ViewData [] 멤버에 저장하는 것이지만, 내 ViewUserControl은 부모의 ViewData에 의존하지 않아야합니다!

이 문제에 대한 매우 간단한 답변이 있다고 확신합니다.이 문제에 대해 웹을 탐색하면서 공유하십시오.

감사!

간단한 답변: ViewUserControl은 항상 존재하는 뷰에서 모델을 받아야합니다. CodeBehind 파일을 ViewUserControl에 추가 하여이 문제를 해결하면 MVC 패턴이 중단됩니다.

도움이 되었습니까?

해결책

기본적으로 페이지와 동일한 모델이 사용됩니다. 각 인스턴스에 모델을 제공하려는 경우 RenderPartial, 귀하의 상황은 아마도 블로그 응용 프로그램에서 여러 항목을 렌더링하는 것과 같습니다. 페이지 모델의 컬렉션에서 각 모델을 가져와 다음과 같이 사용자 컨트롤로 전달할 수 있습니다.

foreach (var post in Model.Entries) {
  Html.RenderPartial("PostTemplate", post);
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top