web-dev-qa-db-ja.com

ControllerNameとActionNameを取得し、マスターページにViewDataを入力しますか?

すべてのコントローラーから継承されるSuperControllerを用意しました。コンストラクタで、ViewData sing ControllerNameとActionNameを設定しようとしています。

ControllerNameとActionNameをViewDataとして渡すことはしません。 ControllerNameとActionNameを必要とするメソッドがあり、メソッドの戻り値をViewDataとして渡す必要があります。

どうやってやるの?

33

ViewDataは使用しないでください。代わりにこれをSite.Masterで使用してください:

<%= ViewContext.RouteData.Values["Controller"] %>
<%= ViewContext.RouteData.Values["Action"] %>

SO-ASP.Net MVCのビューでコントローラーとアクションメソッドの名前を取得する

63
eu-ge-ne

これを試して:

RouteData.Values.First().Value.ToString()
6
José Silva

私があなたの投稿を正しく読んでいて、ビューのコントローラー/アクション名にアクセスしようとしているのではなく、INSTEADがそれらを使って何かを行おうとして、結果をviewdataに入れていると仮定します。

コンテキストがまだ作成されていないため、コンストラクターでそれを行うことはできません。 Initializeメソッドをオーバーライドする必要があります。

protected override void Initialize(System.Web.Routing.RequestContext requestContext)
    {
        base.Initialize(requestContext);

        //here the routedata is available
        ViewData["controller_name"] = (ControllerContext.RouteData.Values["Controller"];
    }

(ControllerContext.RouteDataだけを関数に渡して、必要な値を選択させることもできます。)

3
James S

私はこれらの多くをビューから取得する必要があり、少し異なる角度から攻撃しました-HtmlHelperにいくつかの拡張メソッドを記述して、現在のControllerNameとActionNameを提供しました。 ViewData []バッグに飛び込んだり、適切な場所にアイテムを注入したりする必要がないので、処理が少し簡単です。

1
Wyatt Barnett