簡體   English   中英

Asp.Net Mvc - 如何在共享視圖中擁有“控制器”

[英]Asp.Net Mvc - How to have a “controller” in shared view

我的_Layout.cshtml中有一個名為“_Header.cshtml”的標題的共享視圖。

我想從數據庫中顯示文本和圖像,所以我需要我的控制器進入數據庫並將其返回到_Header.cshtml。

我怎么能這樣做,因為所調用的控制器總是與用戶每個頁面不同。 有沒有辦法讓控制器使用共享視圖?

這是_Layout.cshtml

    <div id="header">
        <div id="title">
            @Html.Partial("_Header")
        </div>

        <div id="logindisplay">
           @Html.Partial("_CultureChooser")
            <br />
           @Html.Partial("_LogOnPartial")
        </div>

        <div id="menucontainer">
           @Html.Partial( "_MenuPartial")
        </div>
    </div>

    <div id="main">
        @RenderBody()
        <div id="footer">
        </div>
    </div>

</div>

在contoller操作中,您可以指定視圖的名稱:

public class MenuController : Controller
{
    [ChildActionOnly]
    public ActionResult Header()
    {
        var model = ... // go to the database and fetch a model
        return View("~/Views/Shared/_Header.cshtml", model);
    }
}

現在在_Layout.cshtml而不是@Html.Partial("_Header")執行此操作:

@Html.Action("Header", "Menu")

... 1年后,我想向Dimitrov回答一件事。 您可以使控制器更清潔:

public class MenuController : Controller
{
    [ChildActionOnly]
    public ActionResult Header()
    {
        var model = ... // go to the database and fetch a model
        return Partial("_Header", model);
    }
}

在其中一個控制器中創建一個動作以呈現標題視圖,然后在_Layout.cshtml中調用@ Html.RenderAction(“Header”)。

如果需要,您還可以將模型傳遞給RenderAction方法。

我希望你問過的問題是......我們可以為共享布局視圖配備一個控制器。

答案很簡單。

要實現此目標,您必須為相同目的創建局部視圖並將其放入共享布局中。 通過這種方式,你可以實現目標

雖然WDuffy提供的RenderAction方法運行良好,但我最近在使用IoC的另一種方法發表了關於這個主題的博客:

http://crazorsharp.blogspot.com/2011/03/master-page-model-in-aspnet-mvc-3-using.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM