2009-05-24 66 views
0

基於來自this SO post的答案,我試圖稍微調整一下,這樣我就不需要硬編碼路由和路由參數,而是(如果可能)使用強類型控制器操作方法: -是否有可能擁有強類型的GetVirtualPath方法?

string path = RouteTable.Routes.GetVirtualPath(
    new RequestContext(HttpContext, 
         RouteTable.Routes.GetRouteData(HttpContext)),  
         new RouteValueDictionary(   
          new 
          { 
           controller = "Foo", 
           action = "Bar" 
          })).VirtualPath; 

MVC Futures命名空間(Microsoft.Web.MVC)可以強制鍵入一個ActionLink ...所以我想知道這是否可以在這裏做這樣的事情。

強類型GetVirtualpath?

回答

1

簡短的回答 - 是的,你可以。我知道這個的原因是因爲你提到的ActionLink(期貨)有一個超載,接受一個強類型的Action代表,它會將其轉換爲RouteValueDictionary代表RouteLink。但我不確定是否可以使用ExpressionHelper。我想你可以。讓我試着找到一個例子...

編輯這可能會實現:

string path = RouteTable.Routes.GetVirtualPath(
    new RequestContext(HttpContext, 
        RouteTable.Routes.GetRouteData(HttpContext)),  
        Microsoft.Web.Mvc.Internal.ExpressionHelper.GetRouteValuesFromExpression<YourController>(c=>c.YourAction())).VirtualPath; 
相關問題