2011-05-19 64 views
18

我使用下面的代碼來獲取當前「行動」在我看來,因爲我想定製一個基於它的動作鏈接。最簡單的方法來訪問從查看RouteData.Values

ViewContext.RequestContext.RouteData.Values("action") 

我的最終目標是建立使用JavaScript的一些動作鏈接和.js文件需要知道當前控制器和動作是什麼,因爲我想它是靈活的。我通過瀏覽框架找到了上述內容,但我不知道我是否找到了正確的東西。

var routeData = ViewContext.RequestContext.RouteData; 
var linkStub = '/@routeData.Values("controller")/@routeData.Values("action")'; 

有誰知道這是最簡單/最直接的方式做到這一點?

+0

這不是很直截了當嗎?它出什麼問題了?登錄此博文http://blog.janjonas.net/2011-02-15/aspnet-mvc_3-get-controller-action-razor-view – 2011-05-19 20:24:21

+0

你能指定你想要做什麼嗎 – maxlego 2011-05-19 20:25:31

+0

我想我'我不確定我是否從正確的位置提取這些信息。似乎我必須通過許多對象瀏覽這些數據,而且我擔心我會過度複雜,或者實際上並沒有採取當前的行動。 – 2011-05-19 20:26:20

回答

26

乾淨的方式將是一個擴展方法

public static class MyUrlHelper 
{ 
    public static string CurrentAction(this UrlHelper urlHelper) 
    { 
     var routeValueDictionary = urlHelper.RequestContext.RouteData.Values; 
     // in case using virtual dirctory 
     var rootUrl = urlHelper.Content("~/"); 
     return string.Format("{0}{1}/{2}/", rootUrl, routeValueDictionary["controller"], routeValueDictionary["action"]); 
    } 
} 
+0

謝謝。我喜歡這個解決方案。是否可以包含路線值(控制器方法參數)? – mosquito87 2013-05-07 10:21:16

+0

應該是什麼結果?目前的網址? – maxlego 2013-05-07 11:20:40

13

你從RequestContext獲取路線數據,它並不真正的問題你如何到達那個(有多種方式)。我不擔心會經歷多個對象(可能只需要幾微秒)。你可以通過創建一個擴展方法(例如url helper的擴展方法)或者讓有問題的控制繼承自定義的實現WebViewPage來創建你需要的快捷方式。像這樣:

public abstract class MyWebViewPage<TModel> : WebViewPage<TModel> 
{ 
    public string ControllerName 
    { 
     get 
     { 
      return Url.RequestContext.RouteData.Values["controller"].ToString(); 
     } 
    } 

    public string ActionName 
    { 
     get 
     { 
      return Url.RequestContext.RouteData.Values["action"].ToString(); 
     } 
    } 
} 
+0

感謝或澄清Necros,這是真正有用的信息知道。 – 2011-05-20 13:29:56

相關問題