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>
在控制器操作中,您可以指定视图的名称:
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
我希望你问的问题是喜欢....我们可以有一个用于共享布局视图的控制器吗?
简单的答案是否定的。
要实现此目标,您必须为同一目的创建一个分部视图,并将其放入共享布局中。这意味着你可以实现你的目标