2014-06-12 9 views
1

_layout.cshtml 파일에 메뉴를 삽입하는 것에 대한 지침이 필요합니다. 1) 나는 두 개의 데이터 모델을 포함하는 추가 모델을 만들 경우에도, 나는 통과 할 수없는 나는 두 레이아웃 파일 예에 모델 :공유보기에서 ASP.NET MVC 데이터베이스 기반 메뉴

모델 :

public class IndexModel 
{ 
    public tblMenu tblMenu { get; set; } 
    public tblSite tblSite { get; set; } 
} 

나는 두 가지 문제를 명중했다 Menu 테이블과 사이트 테이블의 정보가 같은 페이지에 필요합니다.

2) 메뉴 데이터를 전달하기위한 부분 뷰를 만들 때 나는이 방법으로 모델을 사용할 수 없다는 예외를 지속적으로받습니다.

내 Partialview :

@model mvcSPS.Models.IndexModel 
    <li>@Model.tblMenu.MenuName</li> 

내 컨트롤러 : 내가 그물을 저인망하고 아주 솔직한로

  <ul id="navigation"> 
       @foreach (var item in Model) 
       { 
        @Html.Partial("_menu") 
       } 
      </ul> 

public ActionResult _menu() 
    { 
     return PartialView(db.IndexModels.ToList()); 
    } 

내 _layout.cshtml은 .. 나는 데 ASP 고전 (예, 아시겠지만)에서 ASP.net 및 MVC 로의 전환이 정말 어렵습니다.

친절한 조언을 주시면 감사하겠습니다. 감사

앤드류 컨트롤러 함수를 호출 동작 방법의 결과를 렌더링하는 당신의 _layout.cshtml에

답변

0

변경하여 @ Html.Partial.

@foreach (var item in Model) 
{ 
    Html.RenderAction("_menu", "Home"); 
} 

참고 : prepending이 필요하지 말아야 '@'는 foreach 루프의 맥락에서 이후

편집 :

HomeController 아래에있는 내 의견 제안을 바탕으로 :

public ActionResult Menu() { 
    return PartialView("_menu", db.IndexModels.ToList()); 
} 

_layout.cshtml

@{Html.RenderAction("Menu", "Home");} //be sure to fully-qualify the controller since it's layout, otherwise it'll look to the current controller based on route values collection 

, 다시 질문에서 찾고, 메인에서 호출되는 제 2 부분도이 더 적합 할 수 있지만 _menu.cstml

<nav> 
    <ul> 
    @foreach(var item in Model) { 
    Html.Partial("_menuItem", item) 
    } 
    </ul> 
</nav> 

_menuItem.cshtml

@foreach(var item in Model) { 
    <li> 
    <a href="http://url">text</a> 
    @if(item.Children.Any()) 
    { 
     <ul> 
     Html.Partial("_menuItem", item.Children) 
     </ul> 
    } 
    </li> 
} 
+0

부분보기는 중첩 된 항목을 렌더링합니다. 나는 비슷한 것을한다. 그렇지 않으면 여러 차례의 호출이 컨트롤러로 돌아갑니다. –