2015-01-01 81 views
0

我需要記錄所有的GET請求url + page.Title。頁面標題中_Layout.cshtml設置爲View.cshtmlASP .NET MVC 5 Filter獲取View.ViewBag數據

ViewBag.Title = S.MemberDayReports; 

設置我嘗試使用習慣ActionFilterAttribute

<title>@ViewBag.Title - @S.AppName</title> 

ViewBag.Title。在OnResultExecuted(..)ViewBag.Title爲null。

我嘗試重寫控制器OnResultExecuted但ViewBag.Title爲null。

如何截取視圖輸出和日誌ViewBag.Title?

回答

1

覆蓋WebViewPage

public abstract class WebViewPageAdv<T> : WebViewPage<T> 
{ 
    public string Title 
    { 
     get 
     { 
      var title = String.Format("{0} - {1}", ViewBag.Title, S.AppName); 
      //Because Title get in _Layout.cshtml its full page load 
      //and can log user GET request 
      return title; 
     } 
    } 
} 

視圖\網絡。 config

<pages pageBaseType="WebViewPageAdv"> 

_Layout.cshtml

<title>@this.Title</title> 
1

Viewbag主要目的是控制器查看通信。重定向後,Value設置爲空.TempData保留HTTP請求的時間信息。這意味着僅從一頁到另一頁。使用臨時數據。

或者你也可以在每個post/get中更新標題的靜態變量。爲了這個目的,您可以使用過濾器來追蹤當前和最後的數據。 ViewBag不會滿足您的要求。

1

ViewBag描述在MSDN描述了ViewBag用於:

的ViewBag屬性可以動態分享從 控制器值到視圖。它是一個動態對象,這意味着它沒有預定義的屬性 。通過簡單地將它們添加到屬性中,可以定義您希望ViewBag 具有的屬性。在視圖中,您通過使用該屬性的相同名稱來 檢索這些值。

如果在視圖中更改ViewBag的屬性不會返回到管道,並且它在過濾器或控制器中都不可見。

正如你可以在視圖設置Title物業的解決方法 - 在這種情況下,這將是可見無論是在過濾器和控制器:

public ActionResult Index() 
{ 
    ViewBag.Title = "Your title"; 
    return View(); 
} 
+0

很好的解決方案,但需要更改所有操作 –