2011-09-30 53 views
1

我有一個包含此行一個_layout.cshtml:如何在我的佈局中將數據傳遞給PartialView?

@{Html.RenderPartial("Menu");} 

現在我想在一個模型到這個的RenderPartial功能通過。這個模型可以從我的倉庫中讀取。

如何和在哪裏(在代碼中)可以這樣做?

謝謝!

回答

3

RenderPartial有一個重載,它可以將對象發送到局部視圖。 不要忘了在partialview的頂部定義@model以使用正確的對象類型。

@ Html.RenderPartial( 「視圖名」,對象)

額外的信息:

我認爲這將是更容易地創建一個MenuController是發生在:評論後MSDN

編輯存儲庫。然後讓它創建一個視圖,它在模型中接受所需的存儲庫,然後使用foreach將每個菜單項呈現爲actionlinks,並將菜單信息傳遞給它。

所以你必須在這您_layout.cshtml:

這在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屬性確保操作方法只能作爲一個孩子的方法被調用。此操作將在佈局中使用模型渲染相應的局部視圖。

相關問題