2009-05-24 84 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; 
相关问题