MVC 为什么 RouteData 为空

本文关键字:为空 RouteData 为什么 MVC | 更新日期: 2023-09-27 18:36:34

我正在尝试更改所有控制器的默认 ViewBag.Title,所以我想创建一个从控制器继承并在那里处理标题的基类:

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 是空的。
怎么会是空的?我能做什么?

MVC 为什么 RouteData 为空

将任何值分配给控制器之前,您正在构造函数中执行代码。

更好的位置是在 OnActionExecute 中,如下所示:

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