繁体   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