2013-10-23 98 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