我的_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>
答案 0 :(得分:56)
在您的控制器操作中,您可以指定视图的名称:
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 :(得分: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);
}
}
答案 2 :(得分:2)
在其中一个控制器中创建一个动作以呈现标题视图,然后在_Layout.cshtml中调用@ Html.RenderAction(“Header”)。
如果需要,您还可以将模型传递给RenderAction方法。
答案 3 :(得分:0)
虽然WDuffy提供的RenderAction方法效果很好,但我最近在使用IoC的另一种方法发表了关于这个主题的博客:
http://crazorsharp.blogspot.com/2011/03/master-page-model-in-aspnet-mvc-3-using.html
答案 4 :(得分:0)
我希望你提出的问题是...... 我们可以为共享布局视图设置控制器。
简单的答案是否。
要实现此目标,您必须为相同目的创建部分视图,并将其放入共享布局中。通过这种方式,你可以实现目标