Asp.Net Mvc - 如何在共享视图中拥有“控制器”

本文关键字:控制器 视图 拥有 共享 Mvc Net Asp | 更新日期: 2023-09-27 17:56:07

我在_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>

Asp.Net Mvc - 如何在共享视图中拥有“控制器”

在控制器操作中,您可以指定视图的名称:

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年后只想在季米特洛夫的回答中补充一件事。您可以使控制器更干净一些:

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

我希望你问的问题是喜欢....我们可以有一个用于共享布局视图的控制器吗?

简单的答案是否定的。

要实现此目标,您必须为同一目的创建一个分部视图,并将其放入共享布局中。这意味着你可以实现你的目标