diff --git a/src/Orchard.Web/Modules/Orchard.Workflows/Activities/RedirectActivity.cs b/src/Orchard.Web/Modules/Orchard.Workflows/Activities/RedirectActivity.cs index d20144fbc..8f11a2920 100644 --- a/src/Orchard.Web/Modules/Orchard.Workflows/Activities/RedirectActivity.cs +++ b/src/Orchard.Web/Modules/Orchard.Workflows/Activities/RedirectActivity.cs @@ -1,5 +1,5 @@ using System.Collections.Generic; -using System.Linq; +using Orchard.Data; using Orchard.Localization; using Orchard.Workflows.Models; using Orchard.Workflows.Services; @@ -7,9 +7,11 @@ using Orchard.Workflows.Services; namespace Orchard.Workflows.Activities { public class RedirectActivity : Task { private readonly IWorkContextAccessor _wca; + private readonly ITransactionManager _tm; - public RedirectActivity(IWorkContextAccessor wca) { + public RedirectActivity(IWorkContextAccessor wca, ITransactionManager tm) { _wca = wca; + _tm = tm; T = NullLocalizer.Instance; } @@ -26,6 +28,11 @@ namespace Orchard.Workflows.Activities { public override IEnumerable Execute(WorkflowContext workflowContext, ActivityContext activityContext) { var url = activityContext.GetState("Url"); + + // Redirect is going to terminate the request, which will cause any pending updates to get rolled back, + // so we force a commit in case anything has changed + _tm.RequireNew(); + _wca.GetContext().HttpContext.Response.Redirect(url); yield return T("Done"); }