2012-04-13 2 views
2

레이아웃 내에 레이아웃 페이지가 있습니다. 부분 뷰를 사용했고, 부분 뷰에는 빌드 한 메뉴 피처가 포함되어 있습니다. 부분 뷰로 메뉴를 분할했습니다. 유지하기 쉽습니다. 메뉴는 모든 페이지에서 사용되기 때문에 의도적으로 레이아웃에 배치되었지만 일부 옵션 만 특정 페이지에만 나타나는 메뉴에는 조건부 요소가 있습니다.레이아웃 페이지 내에서 부분 뷰로 모델을 전달할 수 없습니다.

나는 앞으로 나아갈 문제가 무엇인지에 대해 비틀 거 렸습니다. 메뉴는 아약스 호출을 사용하여 콘텐츠가 포함 된 부분보기를 렌더링합니다 (페이지로드 줄이기). 나는 회사를 포함하고있는 페이지에서 작업하고있었습니다. 연락처 목록을 클릭하면 메뉴 옵션에 연락처 목록이 표시됩니다. 이미 회사 모델에 연락처 목록을로드했습니다. 메뉴가 레이아웃 페이지에 포함 된 부분 뷰이므로 모델을 수용 할 수 없어 부분 뷰에 모델을 전달할 수 없기 때문에 연락처 목록을 렌더링해야하는 새로운 부분 뷰에서 액세스 할 수 없습니다. 메뉴 부분보기가 레이아웃 페이지에 있기 때문에로드하려고합니다.

이것은 끈적한 상황입니다. 새 섹션을 렌더링 할 수 있도록 레이아웃을 변경하여 새 뷰 모델을 전달할 수는 있지만, 빌드 할 때마다 메뉴를 참조해야합니다. 해충!) 나는 여기에서 뭔가를 놓치고 있어야한다. (아마도 이것이 내 MVC3 응용 프로그램이라고 생각하면된다.) 어떤 제안?

편집 : 나는 내 자신에 더이했다, 짧은 내 레이아웃 페이지는 항상 해당 데이터에 액세스 할 수있는 메뉴가 포함 같은 내 부분보기로 그것을 소비하는 페이지의 모델에 액세스 할 수 있습니다 . 내 메뉴 부분보기에서 페이지를 검사 한 다음 필요에 따라 데이터를 전달하는 일부 조건부 논리를 작성했습니다.

<div class="menu">  
    <ul> 
     <li><a href="@Url.Action("Create", "Contact")">New Contact </li> 
     <li><a href="@Url.Action("Index", "Contact")">Contact List </a></li> 
    </ul> 
    @if (Request.Url.PathAndQuery.Contains("/Contact/Details/")) 
    { 
     <ul> 
      <li>@Html.ActionLink("New Activity", "Create", "Activity", new { companyid = 0, contactid = Model.contact.id }, null)</li> 
     </ul> 
    } 
</div> 

상기 메뉴 부분 뷰의 작은 샘플이지만 메뉴는 접촉/상세 페이지를 구축하고 model.contact.id 전달할 수있다 일 실시 예를 포함한다. 내 메뉴와 레이아웃에 명시 적으로 모델이 포함되어 있지는 않지만 잘 작동하지 않는다는 점에서 효과적입니다.

답변

5

질문을 올바르게 이해하는 경우 레이아웃에 모델이 없으므로 부분 뷰에 모델이 있다고 생각하지 않는다는 것입니다. 레이아웃에 사용할 기본 모델 유형을 확장하기 위해 모든 작업을 수행 할 필요없이 어떻게 레이아웃에 모델을 추가 할 수 있습니까?

1) Html.Partial을 레이아웃에 사용하는 대신 Html.Action을 사용하면 메뉴 데이터를 가져 오는 작업 방법을 사용할 수 있습니다.

2) 사용자 정의 WebViewPage 쓰기 이제 당신도,이 데이터를 직접 액세스 할 수 있습니다 부분보기에서 모델이 필요하지 않습니다

return ((BaseController)ViewContext.Controller).MenuData; 

같은 것을 가지고있는 속성을 포함한다.

두 가지 모두 기본 모델에서 사용할 수있는 모든 메뉴 정보를 포함하는 Menu 속성이 있어야하지만, 웹 사이트의 모든 페이지에서이 데이터에 액세스해야하는 경우 적절합니다.

편집 : 당신이 당신에게 그들의 적절한보기 페이지 또는 하위 레이아웃 중 메뉴의 조각을 사용자 정의 할 수있는 기능을 제공 섹션을 원하는처럼 귀하의 조촐 우려에 대응, 그것은 소리.

섹션 개요에 대해서는 http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx을, 중첩 된 레이아웃/섹션에 대해서는 http://blogs.msdn.com/b/marcinon/archive/2010/12/15/razor-nested-layouts-and-redefined-sections.aspx을 참조하십시오.

+0

답장을 보내 주셔서 감사합니다.이 게시물을 조금 더 가져 가면서 내 게시물을 수정했습니다. –

+0

@DavidAbraham 귀하의 새로운 관심사에 대한 조언을 위해 제 대답을 편집했습니다. – DMulligan

관련 문제