2015-03-31 64 views
13

在我的MVC5項目中,我想在局部視圖中創建一個菜單。從我的數據庫中的內容構建而言,此菜單是動態的。因此,我有一個控制器以創建我的菜單和菜單模式返回到我的局部視圖的護理:MVC:如何讓控制器渲染從視圖啓動的局部視圖

public PartialViewResult GetMenu() 
{ 
    MenuStructuredModel menuStructuredModel = menuBusiness.GetStructuredMenu(); 

    return PartialView("~/Views/Shared/MenuPartial", menuStructuredModel); 
} 

在我的部分觀點稱爲MenuPartial我想用剃刀遍歷我的菜單項,如:

@model MyApp.Models.Menu.MenuStructuredModel 

<div class="list-group panel"> 
    @foreach (var category in Model.ViewTypes[0].Categories) 
    { 
     <a href="#" class="list-group-item lg-green" data-parent="#MainMenu">@category.ShownName</a> 
    } 
</div> 

現在問題是我插入部分視圖的視圖。如果在我看來我只是這樣做:

@Html.Partial("MenuPartial") 

它不會調用控制器先填充數據的模型。我想要的是讓控制器返回部分。但我不知道如何從這個角度來做這件事。在僞代碼,我想這樣做:

@Html.RenderPartialFromController("/MyController/GetMenu") 
+2

用'[ChildActionOnly]'裝飾'GetMenu()'方法,然後在視圖中使用'@ Html.Action(「GetMenu」,「MyController」)' – 2015-03-31 23:03:50

+0

非常感謝。它的工作原理:-) – brinch 2015-03-31 23:08:36

+0

@StephenMuecke您的評論必須是被接受的答案! – 2016-11-06 04:35:27

回答

25

感謝斯蒂芬·馬克和埃裏克Cortorreal我得到它的工作。

這是控制器應該是什麼樣子:

[ChildActionOnly] 
public PartialViewResult GetMenu() 
{ 
    MenuStructuredModel menuStructuredModel = menuBusiness.GetStructuredMenu(); 

    return PartialView("~/Views/Shared/MenuPartial", menuStructuredModel); 
} 

它可能叫這樣的:

@Html.Action("GetMenu", "Home")

(因此GetMenu()在我的例子中聲明在HomeController)。

現在在渲染局部視圖之前調用控制器(並填充模型)。

+3

即使你自己的答案是'接受'? :( – 2017-01-21 00:34:31

+1

對我來說,指定局部視圖時,擴展名(.cshtml)是必要的。 – gTiancai 2018-01-02 09:25:14

9

你應該使用:@ Html.RenderAction或@ Html.Action

+1

鏈接已死。 – IWillScoop 2016-04-28 19:26:34

相關問題