From 428fc341243c87dccc707538854c723f2fb2bfc3 Mon Sep 17 00:00:00 2001 From: Will Price Date: Tue, 26 Jul 2016 11:32:50 +0200 Subject: [PATCH 1/4] Added CT route values to Region MVC data as well, so they can be used to configure region views (for example providing #cols and displaytype to generic region view for column layout) --- .../Mapping/DefaultModelBuilder.cs | 37 +++++++++++-------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/Sdl.Web.Tridion/Mapping/DefaultModelBuilder.cs b/Sdl.Web.Tridion/Mapping/DefaultModelBuilder.cs index 88af2323..ae574c27 100644 --- 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); 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; + } } } From bdf2c6e077cb5b62236161cb29d5bf170c8aad48 Mon Sep 17 00:00:00 2001 From: Will Price Date: Tue, 26 Jul 2016 11:58:08 +0200 Subject: [PATCH 2/4] Add route values from region mvc data --- Sdl.Web.Mvc/Html/HtmlHelperExtensions.cs | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) mode change 100644 => 100755 Sdl.Web.Mvc/Html/HtmlHelperExtensions.cs 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) { From 8f95455b5db3a6070e81eda895b721b256c71edd Mon Sep 17 00:00:00 2001 From: Will Price Date: Tue, 26 Jul 2016 20:03:27 +0200 Subject: [PATCH 3/4] Use regionRouteValues metadata field for region route values --- Sdl.Web.Tridion/Mapping/DefaultModelBuilder.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) mode change 100644 => 100755 Sdl.Web.Tridion/Mapping/DefaultModelBuilder.cs diff --git a/Sdl.Web.Tridion/Mapping/DefaultModelBuilder.cs b/Sdl.Web.Tridion/Mapping/DefaultModelBuilder.cs old mode 100644 new mode 100755 index ae574c27..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); + regionMvcData.RouteValues = GetRouteValues(ct,"regionRouteValues"); return regionMvcData; } From 9a01c5fc42976d98964efb34c0932d31c5ae4fc0 Mon Sep 17 00:00:00 2001 From: Will Price Date: Tue, 26 Jul 2016 20:52:20 +0200 Subject: [PATCH 4/4] Added RouteValues to MvcData.ToString() --- Sdl.Web.Common/Models/MvcData.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) mode change 100644 => 100755 Sdl.Web.Common/Models/MvcData.cs 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