From 73a3bd5ebcd88822020b6498e9bd434a5534d0e3 Mon Sep 17 00:00:00 2001 From: Sebastien Ros Date: Mon, 4 Apr 2011 17:02:03 -0700 Subject: [PATCH] #17365: 404 error when changing Permalink Work Items: 17365 --HG-- branch : 1.x --- .../Contents/Controllers/AdminController.cs | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/Orchard.Web/Core/Contents/Controllers/AdminController.cs b/src/Orchard.Web/Core/Contents/Controllers/AdminController.cs index 25018b916..33b79003d 100644 --- a/src/Orchard.Web/Core/Contents/Controllers/AdminController.cs +++ b/src/Orchard.Web/Core/Contents/Controllers/AdminController.cs @@ -12,11 +12,13 @@ using Orchard.Core.Common.Models; using Orchard.Core.Containers.Models; using Orchard.Core.Contents.Settings; using Orchard.Core.Contents.ViewModels; +using Orchard.Core.Routable.Models; using Orchard.Data; using Orchard.DisplayManagement; using Orchard.Localization; using Orchard.Logging; using Orchard.Mvc.Extensions; +using Orchard.Mvc.Html; using Orchard.UI.Navigation; using Orchard.UI.Notify; using Orchard.Settings; @@ -295,6 +297,17 @@ namespace Orchard.Core.Contents.Controllers { if (!Services.Authorizer.Authorize(Permissions.EditContent, contentItem, T("Couldn't edit content"))) return new HttpUnauthorizedResult(); + // store the previous route in case a back redirection is requested + string previousRoute = null; + var route = contentItem.As(); + if(route != null + &&!string.IsNullOrWhiteSpace(returnUrl) + && Url.IsLocalUrl(returnUrl) + && returnUrl == Url.ItemDisplayUrl(contentItem) // only if the original returnUrl is the content itself + ) { + previousRoute = route.Path; + } + dynamic model = _contentManager.UpdateEditor(contentItem, this); if (!ModelState.IsValid) { _transactionManager.Cancel(); @@ -304,6 +317,13 @@ namespace Orchard.Core.Contents.Controllers { conditionallyPublish(contentItem); + // did the route change ? + if (!string.IsNullOrWhiteSpace(returnUrl) + && previousRoute != null + && contentItem.As().Path != previousRoute) { + returnUrl = Url.ItemDisplayUrl(contentItem); + } + Services.Notifier.Information(string.IsNullOrWhiteSpace(contentItem.TypeDefinition.DisplayName) ? T("Your content has been saved.") : T("Your {0} has been saved.", contentItem.TypeDefinition.DisplayName));