2014-10-06 105 views
0

我有我的_Layout.cshtml文件,它使用ViewBag模型来渲染一些动态内容。在布局页面中使用ViewBag

我明白ViewBag可以在控制器中填充并在视图和/或布局页面中访问。

我的问题是,如果我的布局页面正在使用@ViewBag.SiteName,我想避免在返回视图之前在每个控制器中设置此变量。有没有办法在全球范围内设置这个变量?或者我应该如何将这些数据传递给布局页面?

+0

请看看这有助于! http://forums.asp.net/t/1820819.aspx?Global+ViewBag+Property – CodeMad 2014-10-06 21:09:15

+0

http://stackoverflow.com/questions/5453327/how-to-set-viewbag-properties-for-all-views-没有使用的基础类为控制 – CodeMad 2014-10-06 21:09:41

+0

你可以创建一个动作过滤器设置属性,然后在'global.asax'中全局应用过滤器 – 2014-10-06 21:10:34

回答

3

如果您在ViewBag中设置了任何东西 - 发生这种情况之后布局已渲染 - 您错过了船。

正如其他人所说,你可以创建一个 “助手” 控制器:

public class LayoutController : BaseController 
{ 
    [ChildActionOnly] 
    public ActionResult SiteName() 
    { 
     return new ContentResult {Content = "Site name goes here"}; 
    } 
} 

然后,在你的布局:

@{Html.Action("SiteName", "Layout")} 
+1

不能正常工作........ – 2016-04-15 11:48:45

+0

什么是不工作@Vlado – Alex 2016-04-15 11:52:13

+1

我打电话@ {Html.Action(“SiteName”,“Layout”)}在JavaScript和结果是空字符串。例。 var a =''@ {Html.Action(“SiteName”,“Layout”)}“,一个是空字符串,当调试方法返回字符串相反,但在视图内是空的 – 2016-04-15 11:53:41