5

すべてのコントローラーのデフォルトの 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 が null であるため、null 参照例外が発生します。
どうしてヌルなの?そして、私は何ができますか?

4

1 に答える 1

11

コントローラーに値が割り当てられる前に、コンストラクター内でコードを実行しています。

これを行うのに適した場所は、次のような OnActionExecuting です。

    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
      base.OnActionExecuting(filterContext);
      var controller = default(object);
      if (RouteData.Values.TryGetValue("controller", out controller))
      {
         ViewBag.Title = controller;
      }
   }
于 2013-10-23T08:24:58.333 に答える