2016-09-12 4 views
2

属性ルートでコントローラメソッドで、私はコントローラ内のルートを定義する

[Route("AboutUs/Profile")] 
[Route("AboutUs/Organization")] 
public ActionResult Contents() 
{ 
    string _controller = RouteData.Route.GetRouteData(this.HttpContext).Values["controller"].ToString(); 
    string _action = RouteData.Route.GetRouteData(this.HttpContext).Values["action"].ToString(); 
} 

が、_action == "Contents"をコントローラとアクション名を取得し、どのように私は_action = "Profile"を得ることができますか?

string _controller = this.ControllerContext.RouteData.Values["controller"].ToString(); 
string _action = this.ControllerContext.RouteData.Values["action"].ToString(); 

この

string _controller = this.RouteData.Values["controller"].ToString(); 
string _action = this.RouteData.Values["_action"].ToString(); 

が、このすべてがうまくいかない:

は、私はこれを試してみました。

+0

は、静的関数に沿って行動を得ますか? 'Action'を打つ前に、HttpContext.Currentを使わなければなりません。 –

+0

私はHttpContext.Currentを使用しましたが、動作しませんでした。 –

+0

'HttpContext.Current.Request.RawUrl'をチェックしてください –

答えて

0

私は行動を記録するために、このコードを書いた:

public class PreviousPage 
{ 
    public string Action { get; set; } 
    public string Controller { get; set; } 
    public object Parameters { get; set; } 

    public PreviousPage() { PP(); } 
    public PreviousPage(string action, string controller, object parameters) 
    { 
     Action = action; 
     Controller = controller; 
     Parameters = parameters; 
    } 

    public void PP() 
    { 
     var htpc = HttpContext.Current.Request.RequestContext.RouteData.Values; 

     object controller; 
     htpc.TryGetValue("controller", out controller); 
     Controller = controller as string; 

     object action; 
     htpc.TryGetValue("action", out action); 
     Action = action as string; 

     object id; 
     htpc.TryGetValue("id", out id); 
     int q = HttpContext.Current.Request.RawUrl.IndexOf('?'); 
     if (q>-1) 
      Parameters = HttpContext.Current.Request.RawUrl.Substring(q+1); 
     else 
      Parameters = id as string; 
    } 
} 

それはmutchにですが、変更のビットとあなたがそこに着くでしょう。

編集:あなたはこれを使用しないコントローラで

public static string GetAction() 
    { 
     object action=null; 
     HttpContext.Current.Request.RequestContext.RouteData.Values.TryGetValue("action", out action); 
     return action as string; 
    } 
+0

答えにはありがたいことですが、この修正はソリューションにとっては大きすぎます。ルート属性で直接アクションを取得する方法はありませんか? –

+0

これを静的クラスにすることができます。あなたが欲しいところから電話するだけです。 –

関連する問題