是否可以使用强类型的GetVirtualPath方法?

时间:2009-05-24 05:15:03

标签: asp.net-mvc routes

根据this SO post的答案,我试图稍微调整一下,以便我不需要对路径进行硬编码并路由参数,而是(如果可能的话)使用强类型控制器动作方法: -

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 个答案:

答案 0 :(得分: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;