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

Pat*_*ins 38 c# asp.net asp.net-mvc asp.net-mvc-3

我的_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>
Run Code Online (Sandbox Code Playgroud)

Dar*_*rov 56

在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);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在在你_Layout.cshtml而不是@Html.Partial("_Header")这样做:

@Html.Action("Header", "Menu")
Run Code Online (Sandbox Code Playgroud)

  • 现在它工作,我返回一个View()而不是PartialView() (3认同)

vid*_*oon 9

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

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

  • 你救了我,只是我觉得它一定是 { return PartialView("_Header", model); 我没有找到 Partial 方法,我错了吗? (2认同)