2012-11-14 35 views
1

我想獲得ViewBagOnResultExecuted過濾器。無論在OnResultExecuted過濾器獲取ViewBag

((ViewResultBase)filterContext.Result).ViewBag.Get 

filterContext.Controller.ViewBag.Get 

回報ViewBag分配的作用。但我想獲得ViewBag分配在「view.cshtml」。
我想acheve什麼是從剃刀

@{ 
ViewBag.Title = "My Title"; 
} 

並獲得ViewBag .title僞那麼,寫它結束響應文本作爲一個JavaScript的。這在@Ajax.ActionLink()的情況下很有用。我的OnActionExecuted篩選代碼必須是這樣的:

string scriptText = "<script type='text/javascript'>document.title = '" + ViewBag.Title + "';</script>"; 
filterContext.HttpContext.Response.Write(scriptText); 

任何幫助,將不勝感激。

+0

這意味着你知道正確的答案。如果是這樣你可以回答我的問題。 – Mesut

回答

1

您無法將值從視圖傳遞到控制器。它基本上是反對MVC模式。當視圖執行時,它會獲得自己的副本ViewDataViewBag),所以對其的任何更改僅在視圖的範圍內有效。

從斯科特Guthrie的博客:

意見不應該包含任何應用邏輯或數據庫檢索 碼,但不是所有的應用程序/數據邏輯應該只由 控制器類進行處理。此分區背後的動機是幫助 強制將您的應用程序/數據邏輯從UI 代碼中分離出來。這樣可以更容易地單獨測試您的應用程序/數據邏輯與您的UI渲染邏輯隔離。

視圖只能使用Controller類傳遞給它的視圖專用數據 來呈現它們的輸出。在ASP.NET MVC框架中,我們 調用這個特定於視圖的數據「ViewData」。這篇博文的其餘部分 將介紹一些可用於將此「ViewData」從控制器傳遞到視圖以進行呈現的一些不同方法。

http://weblogs.asp.net/scottgu/archive/2007/12/06/asp-net-mvc-framework-part-3-passing-viewdata-from-controllers-to-views.aspx

與解釋類似的問題也正在於此:Setting ViewData item in a Partial to be read in a View

所以更接近你的問題。您不能將Title的值傳遞給您的動作執行過濾器,並且您必須在控制器的範圍內解決它。

+1

我很失望。有沒有另外一種方法來完成這個? – Mesut

+0

你能用代碼解釋嗎?爲了可以理解。 – Mesut

+0

我再次重讀您的問題,並刪除了我的建議,因爲現在我覺得我不太瞭解您的要求。那是什麼javascript?你爲什麼用js設置標題?您是否打算通過單擊您提到的@ Ajax.ActionLink來更改document.title? – mipe34