一旦在显示的映射上方没有映射的路线可以匹配从生成的路线
urlHelper.Action("Action", "Controller", routeValueDictionary);
那么您可以安全地假设使用路线名称。
例如,如果您有两条这样定义的路线...
routes.MapRoute(
"AnotherRouteName",
"{controller}/blah/{action}",
new { controller = "Controller", action = "Action" }
);
routes.MapRoute(
"RouteName",
"Url",
new { controller = "Controller", action = "Action" }
);
...那么第一条路线将与..匹配
urlHelper.Action("Action", "Controller", routeValueDictionary);
更新:
如果您查看UrlHelper的来源
您会注意到,它们在内部使用相关参数调用相同方法的相同重载。
public virtual string Action(string actionName, string controllerName, object routeValues)
{
return GenerateUrl(null /* routeName */, actionName, controllerName, TypeHelper.ObjectToDictionary(routeValues));
}
public virtual string Action(string actionName, string controllerName, RouteValueDictionary routeValues)
{
return GenerateUrl(null /* routeName */, actionName, controllerName, routeValues);
}
//...other code removed for brevity
public virtual string RouteUrl(string routeName, object routeValues, string protocol)
{
return GenerateUrl(routeName, null /* actionName */, null /* controllerName */, protocol, null /* hostName */, null /* fragment */, TypeHelper.ObjectToDictionary(routeValues), RouteCollection, RequestContext, false /* includeImplicitMvcValues */);
}
太多代码在这里发布。查看类源以更好地了解幕后发生的事情。
不能提供比这更详细的了。我一直回到源代码。