diff --git a/Sdl.Web.Common/Models/MvcData.cs b/Sdl.Web.Common/Models/MvcData.cs old mode 100644 new mode 100755 index e69c0dcb..102b1998 --- a/Sdl.Web.Common/Models/MvcData.cs +++ b/Sdl.Web.Common/Models/MvcData.cs @@ -1,7 +1,8 @@ using System.Collections.Generic; using System.Linq; using Sdl.Web.Common.Configuration; - +using System; + namespace Sdl.Web.Common.Models { /// @@ -132,7 +133,8 @@ public override int GetHashCode() public override string ToString() { // TODO: what about the other properties? - return string.Format("{0}:{1}:{2}", AreaName, ControllerName, ViewName); + var routeValues = RouteValues != null ? String.Join(",", RouteValues.Select(v => String.Format("{0}:{1}", v.Key, v.Value))) : ""; + return string.Format("{0}:{1}:{2}:[{3}]", AreaName, ControllerName, ViewName, routeValues); } #endregion diff --git a/Sdl.Web.Mvc/Html/HtmlHelperExtensions.cs b/Sdl.Web.Mvc/Html/HtmlHelperExtensions.cs old mode 100644 new mode 100755 index b1652bc3..5ec3e512 --- a/Sdl.Web.Mvc/Html/HtmlHelperExtensions.cs +++ b/Sdl.Web.Mvc/Html/HtmlHelperExtensions.cs @@ -381,9 +381,20 @@ public static MvcHtmlString DxaRegion(this HtmlHelper htmlHelper, RegionModel re MvcData mvcData = region.MvcData; string actionName = mvcData.ActionName ?? SiteConfiguration.GetRegionAction(); string controllerName = mvcData.ControllerName ?? SiteConfiguration.GetRegionController(); - string controllerAreaName = mvcData.ControllerAreaName ?? SiteConfiguration.GetDefaultModuleName(); - - MvcHtmlString result = htmlHelper.Action(actionName, controllerName, new { Region = region, containerSize = containerSize, area = controllerAreaName }); + string controllerAreaName = mvcData.ControllerAreaName ?? SiteConfiguration.GetDefaultModuleName(); + + RouteValueDictionary parameters = new RouteValueDictionary(); + parameters["containerSize"] = containerSize; + parameters["region"] = region; + parameters["area"] = controllerAreaName; + if (mvcData.RouteValues != null) + { + foreach (string key in mvcData.RouteValues.Keys) + { + parameters[key] = mvcData.RouteValues[key]; + } + } + MvcHtmlString result = htmlHelper.Action(actionName, controllerName, parameters); if (WebRequestContext.IsPreview) { diff --git a/Sdl.Web.Tridion/Mapping/DefaultModelBuilder.cs b/Sdl.Web.Tridion/Mapping/DefaultModelBuilder.cs old mode 100644 new mode 100755 index 88af2323..9584302b --- a/Sdl.Web.Tridion/Mapping/DefaultModelBuilder.cs +++ b/Sdl.Web.Tridion/Mapping/DefaultModelBuilder.cs @@ -990,7 +990,7 @@ private static MvcData GetRegionMvcData(IComponentPresentation cp) regionMvcData.RegionName = regionNameField.Value; } } - + regionMvcData.RouteValues = GetRouteValues(ct,"regionRouteValues"); return regionMvcData; } @@ -1167,22 +1167,29 @@ private static MvcData GetMvcData(IComponentPresentation cp) { mvcData.ActionName = ct.MetadataFields["action"].Value; } - if (ct.MetadataFields.ContainsKey("routeValues")) - { - string[] routeValues = ct.MetadataFields["routeValues"].Value.Split(','); - mvcData.RouteValues = new Dictionary(routeValues.Length); - foreach (string routeValue in routeValues) - { - string[] routeValueParts = routeValue.Trim().Split(':'); - if (routeValueParts.Length > 1 && !mvcData.RouteValues.ContainsKey(routeValueParts[0])) - { - mvcData.RouteValues.Add(routeValueParts[0], routeValueParts[1]); - } - } - } + mvcData.RouteValues = GetRouteValues(ct); } return mvcData; - } + } + + private static Dictionary GetRouteValues(IComponentTemplate ct, String metaFieldName = "routeValues") + { + Dictionary routeValues = null; + if (ct.MetadataFields.ContainsKey(metaFieldName)) + { + string[] routeValuesString = ct.MetadataFields[metaFieldName].Value.Split(','); + routeValues = new Dictionary(routeValuesString.Length); + foreach (string routeValue in routeValuesString) + { + string[] routeValueParts = routeValue.Trim().Split(':'); + if (routeValueParts.Length > 1 && !routeValues.ContainsKey(routeValueParts[0])) + { + routeValues.Add(routeValueParts[0], routeValueParts[1]); + } + } + } + return routeValues; + } } }