根据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 ???
答案 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;