2011-09-30 3 views

답변

3

RenderPartial에는 개체를 부분 뷰로 보낼 수있는 오버로드가 있습니다. 올바른 오브젝트 유형을 사용하려면 partialview의 맨 위에 @model을 정의하는 것을 잊지 마십시오.

@ Html.RenderPartial ("view 이름", 개체)

추가 정보 :

나는이에 소요 MenuController을 쉽게 만들 수있을 거라고 생각 : 코멘트 후 MSDN

편집 저장소. 그런 다음 필요한 저장소를 모델로 취한 다음, foreach가 모든 메뉴 항목을 actionlinks로 렌더링하고 메뉴 정보를 전달하는보기를 만듭니다.

그래서 당신은 당신의 _layout.cshtml이있을 것입니다 :

<div id="Menu"> 
    @{Html.RenderAction("Menu", "Menu");} 
</div> 

이 당신의 MenuController에 :

public class MenuController : Controller 
{ 
    private IMenuRepository _repository; 

    public MenuController(IMenuRepository repo) 
    { 
     _repository = repo; 
    } 
    // 
    // GET: /Menu/ 

    public PartialViewResult Menu(string menu = null) 
    { 
     ViewBag.SelectedMenu = menu; 

     IEnumerable<MenuInfoObject> menus= _repository.Menus; 
     return PartialView(menus); 
    } 
} 

그리고 당신의 MenuView :

@model IEnumerable<MenuInfoObject> 
@{ 
    Layout = null; 
} 
@foreach (var item in Model) 
{ 
    @Html.RouteLink(item.MenuName, new 
{ 
    controller = item.ControllerInfo, 
    action = item.ActionInfo, 
}, new 
     { 
      @class = item.Menu == ViewBag.SelectedMenu ? "selected" : null 
     }) 
} 

는 그 가까이겠습니까을 솔루션에?

+0

나는 그것을 알고 있지만, 내 layout.cshtml 파일에 있습니다. 저장소에서 내 모델을 어디에서 읽을 수 있습니까? –

+0

수정 된 게시물 ... 도움이 되었기를 바랍니다. –

0

레이아웃의 부분보기로 데이터를 전달하는 또 다른 솔루션이 있습니다. 당신은 단순히 당신의 _Layout.cshtml 파일

@Html.Action("ActionName","ControllerName") 

에 그리고 당신의 컨트롤러에이를 추가 할 수 있습니다

[ChildActionOnly] 
    public ActionResult ActionName() 
    { 
     var model = new YourModel(); 
     return PartialView(model); 

    } 

ChildActionOnly 속성은 액션 메소드 만 자식 방법으로 호출 할 수 있도록합니다. 이 작업을 수행하면 레이아웃의 모델로 해당 부분 뷰가 렌더링됩니다.

관련 문제