2013-10-23 132 views
3

我試圖更改默認ViewBag.Title我所有的控制器,所以我雖然有關使一個基類,從控制器繼承和處理的稱號有:MVC爲什麼RouteData爲空?

public class MyController : Controller 
{ 
    public MyController() 
     : base() 
    { 
     var controller = default(object); 

     if (RouteData.Values.TryGetValue("controller", out controller)) 
     { 
      ViewBag.Title = controller; 
     } 
    } 
} 

然後從我的控制器繼承類:

public class GlobalSettingsController : MyController 
{ 

但是當我運行的頁面,我得到一個空引用異常,因爲的RouteData爲空。
它是如何變爲空?我能做什麼?

回答

8

在將任何值分配給控制器之前,您正在執行構造函數內的代碼。

一個更好的地方做,這是在OnActionExecuting這樣的:

protected override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     base.OnActionExecuting(filterContext); 
     var controller = default(object); 
     if (RouteData.Values.TryGetValue("controller", out controller)) 
     { 
     ViewBag.Title = controller; 
     } 
    } 
+0

謝謝。我尋找事件,但控制器似乎沒有。 http://msdn.microsoft.com/en-us/library/system.web.mvc.controller%28v=vs.108%29.aspx 我是相當新的MVC,我沒有考慮重寫方法。 – Serge

+0

謝謝,這解決了我的問題。 – nrodic