2014-10-06 47 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