我有我的_Layout.cshtml
文件,它使用ViewBag
模型来渲染一些动态内容。在布局页面中使用ViewBag
我明白ViewBag
可以在控制器中填充并在视图和/或布局页面中访问。
我的问题是,如果我的布局页面正在使用@ViewBag.SiteName
,我想避免在返回视图之前在每个控制器中设置此变量。有没有办法在全球范围内设置这个变量?或者我应该如何将这些数据传递给布局页面?
我有我的_Layout.cshtml
文件,它使用ViewBag
模型来渲染一些动态内容。在布局页面中使用ViewBag
我明白ViewBag
可以在控制器中填充并在视图和/或布局页面中访问。
我的问题是,如果我的布局页面正在使用@ViewBag.SiteName
,我想避免在返回视图之前在每个控制器中设置此变量。有没有办法在全球范围内设置这个变量?或者我应该如何将这些数据传递给布局页面?
如果您在ViewBag中设置了任何东西 - 发生这种情况之后布局已渲染 - 您错过了船。
正如其他人所说,你可以创建一个 “助手” 控制器:
public class LayoutController : BaseController
{
[ChildActionOnly]
public ActionResult SiteName()
{
return new ContentResult {Content = "Site name goes here"};
}
}
然后,在你的布局:
@{Html.Action("SiteName", "Layout")}
不能正常工作........ – 2016-04-15 11:48:45
什么是不工作@Vlado – Alex 2016-04-15 11:52:13
我打电话@ {Html.Action(“SiteName”,“Layout”)}在JavaScript和结果是空字符串。例。 var a =''@ {Html.Action(“SiteName”,“Layout”)}“,一个是空字符串,当调试方法返回字符串相反,但在视图内是空的 – 2016-04-15 11:53:41
请看看这有助于! http://forums.asp.net/t/1820819.aspx?Global+ViewBag+Property – CodeMad 2014-10-06 21:09:15
http://stackoverflow.com/questions/5453327/how-to-set-viewbag-properties-for-all-views-没有使用的基础类为控制 – CodeMad 2014-10-06 21:09:41
你可以创建一个动作过滤器设置属性,然后在'global.asax'中全局应用过滤器 – 2014-10-06 21:10:34