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,