50 lines
2.3 KiB
C#
50 lines
2.3 KiB
C#
|
namespace System.Web.Mvc {
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Web.Routing;
|
|||
|
|
|||
|
internal static class RouteValuesHelpers {
|
|||
|
public static RouteValueDictionary GetRouteValues(RouteValueDictionary routeValues) {
|
|||
|
return (routeValues != null) ? new RouteValueDictionary(routeValues) : new RouteValueDictionary();
|
|||
|
}
|
|||
|
|
|||
|
public static RouteValueDictionary MergeRouteValues(string actionName, string controllerName, RouteValueDictionary implicitRouteValues, RouteValueDictionary routeValues, bool includeImplicitMvcValues) {
|
|||
|
// Create a new dictionary containing implicit and auto-generated values
|
|||
|
RouteValueDictionary mergedRouteValues = new RouteValueDictionary();
|
|||
|
|
|||
|
if (includeImplicitMvcValues) {
|
|||
|
// We only include MVC-specific values like 'controller' and 'action' if we are generating an action link.
|
|||
|
// If we are generating a route link [as to MapRoute("Foo", "any/url", new { controller = ... })], including
|
|||
|
// the current controller name will cause the route match to fail if the current controller is not the same
|
|||
|
// as the destination controller.
|
|||
|
|
|||
|
object implicitValue;
|
|||
|
if (implicitRouteValues != null && implicitRouteValues.TryGetValue("action", out implicitValue)) {
|
|||
|
mergedRouteValues["action"] = implicitValue;
|
|||
|
}
|
|||
|
|
|||
|
if (implicitRouteValues != null && implicitRouteValues.TryGetValue("controller", out implicitValue)) {
|
|||
|
mergedRouteValues["controller"] = implicitValue;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// Merge values from the user's dictionary/object
|
|||
|
if (routeValues != null) {
|
|||
|
foreach (KeyValuePair<string, object> routeElement in GetRouteValues(routeValues)) {
|
|||
|
mergedRouteValues[routeElement.Key] = routeElement.Value;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// Merge explicit parameters when not null
|
|||
|
if (actionName != null) {
|
|||
|
mergedRouteValues["action"] = actionName;
|
|||
|
}
|
|||
|
|
|||
|
if (controllerName != null) {
|
|||
|
mergedRouteValues["controller"] = controllerName;
|
|||
|
}
|
|||
|
|
|||
|
return mergedRouteValues;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|