0

基于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 ???

4

1 回答 1

1

简短的回答 - 是的,你可以。我知道这是因为ActionLink您所说的 (Futures) 有一个重载,该重载接受一个强类型Action委托,该委托将其转换RouteValueDictionaryRouteLink. 我不确定你是否可以只使用ExpressionHelper。我想你可以。让我试着找到一个例子......

编辑这可能有效:

string path = RouteTable.Routes.GetVirtualPath(
    new RequestContext(HttpContext,
                   RouteTable.Routes.GetRouteData(HttpContext)),    
                   Microsoft.Web.Mvc.Internal.ExpressionHelper.GetRouteValuesFromExpression<YourController>(c=>c.YourAction())).VirtualPath;
于 2009-05-24T09:09:19.747 回答