2014-03-05 2 views
0

메인 콘텐츠를로드하는 모델과 함께 내 웹 페이지 용 사이드 바를로드하는 모델이 있습니다. 콘텐츠 모델은 각 페이지마다 다르지만 사이드 바 모델은 일정하게 유지됩니다. 컨텐츠 모델은 사용자의 클릭 링크로 변경됩니다 :같은 페이지에 컨트롤러가 여러 번 호출되었습니다.

~/Home/About 
~/Home/Contact 

내가 이상적으로 사이드 바 모델을 표시하는 PartialView을 반환하는 컨트롤러를로드 _Layout.cshtml 코드의 라인을 넣어 싶은. 그래서 우리는 가질 수 있습니다 :

<div id="sidebar"> 
    @Html.Render("~/SidebarController/GetSidebar"); 
</div> 
<div id="content"> 
    @RenderBody() 
</div> 

그러나 이것은 작동하지 않을 것입니다. 이것을 어떻게 성취합니까?

답변

2

은 내가 무엇을 할 것이 _Layout.cshtml 파일에 @Html.Action("GetSidebar")을 사용하는 것입니다, 당신은 당신이 기본 컨트롤러에 넣고하지 않는 한 당신은 당신의 컨트롤러의 각이 필요

public ActionResult GetSidebar() 
    { 
     //do stuff, populate menu items from database? etc 

     // Pass the data to the partial view 
     return PartialView("_Sidebar"); 
    } 

컨트롤러에서 작업을 할 수 있습니다 그런 다음 다른 모든 컨트롤러를 상속하고 직접 호출 할 수 없도록 액션 상단에 [ChildActionOnly]을 추가 할 수 있습니다.

1

나는 당신이하려고하는 것과 똑같은 일을합니다. 나는 다음을 사용한다 :

@Html.Action("GetSidebar", "SidebarController") 

내 사이드 ​​바를 그려서 잘 동작한다. 사이드 바를 반복해서로드하는 것을 저장하기 위해 뷰를 변경할 때 ajax 호출을 사용하고 각 페이지를 나타내는 부분 뷰로 내용을 대체하는 Ajax 대상을 "content"div로 지정했습니다.

관련 문제