From be16181bdb1ee3fbfff80a298e3f8824678931ff Mon Sep 17 00:00:00 2001 From: eeichinger Date: Wed, 4 Mar 2009 21:42:08 +0000 Subject: [PATCH] fixed SPRNET-1018 --- doc/reference/src/web.xml | 10 +++++++--- src/Spring/Spring.Web/Web/Support/Result.cs | 13 +++++++++++-- src/Spring/Spring.Web/Web/Support/ResultMode.cs | 15 ++++++++++++++- .../Spring.Web.Tests/Web/Support/ResultTests.cs | 15 +++++++++++++++ 4 files changed, 47 insertions(+), 6 deletions(-) diff --git a/doc/reference/src/web.xml b/doc/reference/src/web.xml index 36337b7c..09747dec 100644 --- a/doc/reference/src/web.xml +++ b/doc/reference/src/web.xml @@ -2501,15 +2501,19 @@ private void SetLanguage(object sender, CommandEventArgs e) - redirect + redirect: calls Response.Redirect(string) - transfer + redirectNoAbort: calls Response.Redirect(string, false) - TransferNoPreserve + transfer: calls Server.Transfer(string) + + + + TransferNoPreserve: calls Server.Transfer(string, false) diff --git a/src/Spring/Spring.Web/Web/Support/Result.cs b/src/Spring/Spring.Web/Web/Support/Result.cs index ae02c78f..9e7c7571 100644 --- a/src/Spring/Spring.Web/Web/Support/Result.cs +++ b/src/Spring/Spring.Web/Web/Support/Result.cs @@ -227,13 +227,21 @@ namespace Spring.Web.Support } /// - /// Indicates, if should be called with preserverForm='true' | 'false'. Only relevant for ResultMode.TransferXXXX modes. + /// Indicates, if should be called with preserveForm='true' | 'false'. Only relevant for ResultMode.TransferXXXX modes. /// public bool PreserveForm { get { return (Mode == ResultMode.Transfer); } } + /// + /// Indicates, if should be called with endResponse='true' | 'false'. Only relevant for ResultMode.RedirectXXXX modes. + /// + public bool EndResponse + { + get { return (Mode == ResultMode.Redirect); } + } + #endregion /// @@ -249,6 +257,7 @@ namespace Spring.Web.Support switch (Mode) { case ResultMode.Redirect: + case ResultMode.RedirectNoAbort: DoRedirect( context ); break; case ResultMode.Transfer: @@ -312,7 +321,7 @@ namespace Spring.Web.Support /// protected virtual void DoRedirect( object context ) { - HttpContext.Current.Response.Redirect( GetRedirectUri( context ) ); + HttpContext.Current.Response.Redirect( GetRedirectUri( context ), EndResponse ); } /// diff --git a/src/Spring/Spring.Web/Web/Support/ResultMode.cs b/src/Spring/Spring.Web/Web/Support/ResultMode.cs index 43e03c55..e111a430 100644 --- a/src/Spring/Spring.Web/Web/Support/ResultMode.cs +++ b/src/Spring/Spring.Web/Web/Support/ResultMode.cs @@ -68,6 +68,19 @@ namespace Spring.Web.Support ///

/// /// - TransferNoPreserve = 2 + TransferNoPreserve = 2, + + /// + /// A redirect. + /// + /// + ///

+ /// Issues a redirect (to the user-agent - typically a browser) using + /// the method. + ///

+ ///
+ /// + RedirectNoAbort = 3 + } } diff --git a/test/Spring/Spring.Web.Tests/Web/Support/ResultTests.cs b/test/Spring/Spring.Web.Tests/Web/Support/ResultTests.cs index 2b684fcc..c66a6b6a 100644 --- a/test/Spring/Spring.Web.Tests/Web/Support/ResultTests.cs +++ b/test/Spring/Spring.Web.Tests/Web/Support/ResultTests.cs @@ -140,6 +140,21 @@ namespace Spring.Web.Support Result result = new Result("redirect:" + ExpectedTargetPageName); Assert.AreEqual(ResultMode.Redirect, result.Mode, "Not extracting the correct ResultMode " + "from the result string passed into the ctor."); + Assert.IsTrue(result.EndResponse); + Assert.IsNull(result.Parameters, + "No parameters were passed but the Parameters property appears to be set to a non-null value anyway."); + Assert.AreEqual(ExpectedTargetPageName, result.TargetPage, + "The TargetPage property is not being correctly extracted " + + "from the result string passed into the ctor."); + } + + [Test] + public void WithRedirectNoAbortResultMode() + { + Result result = new Result("redirectnoabort:" + ExpectedTargetPageName); + Assert.AreEqual(ResultMode.RedirectNoAbort, result.Mode, "Not extracting the correct ResultMode " + + "from the result string passed into the ctor."); + Assert.IsFalse(result.EndResponse); Assert.IsNull(result.Parameters, "No parameters were passed but the Parameters property appears to be set to a non-null value anyway."); Assert.AreEqual(ExpectedTargetPageName, result.TargetPage,