[asp.net] Fix for bug #685116. AJAX post-back which redirects the browser does not...
authorMarek Habersack <grendel@twistedcode.net>
Thu, 14 Apr 2011 22:50:58 +0000 (00:50 +0200)
committerMarek Habersack <grendel@twistedcode.net>
Thu, 14 Apr 2011 22:55:14 +0000 (00:55 +0200)
mcs/class/System.Web.Extensions/System.Web.Handlers/ScriptModule.cs
mcs/class/System.Web.Extensions/System.Web.UI/ScriptManager.cs
mcs/class/System.Web/System.Web/HttpException.cs

index 6759765c1208a68599a82a7fbca934f4f3b3af4e..ecfa05c7937fcbdced93579751fa5c13498bb9b5 100644 (file)
@@ -88,7 +88,8 @@ namespace System.Web.Handlers
                        }\r
                }\r
 \r
-               void PreSendRequestHeaders (object sender, EventArgs e) {\r
+               void PreSendRequestHeaders (object sender, EventArgs e)\r
+               {\r
                        HttpApplication app = (HttpApplication) sender;\r
                        HttpContext context = app.Context;\r
                        if (context.Request.Headers ["X-MicrosoftAjax"] == "Delta=true") {\r
@@ -97,23 +98,18 @@ namespace System.Web.Handlers
                                if (p == null && context.CurrentHandler is IServiceProvider)\r
                                        p = (Page) ((IServiceProvider) context.CurrentHandler).GetService (typeof (Page));\r
 #endif\r
-                               if (p == null)\r
-                                       return;\r
-                               ScriptManager sm = ScriptManager.GetCurrent (p);\r
-                               if (sm == null)\r
-                                       return;\r
+                               ScriptManager sm = ScriptManager.GetCurrentInternal (p);\r
                                if (context.Response.StatusCode == 302) {\r
                                        context.Response.StatusCode = 200;\r
                                        context.Response.ClearContent ();\r
-                                       if (context.Error == null || sm.AllowCustomErrorsRedirect)\r
+                                       if (context.Error == null || (sm != null && sm.AllowCustomErrorsRedirect))\r
                                                ScriptManager.WriteCallbackRedirect (context.Response.Output, context.Response.RedirectLocation);\r
                                        else\r
-                                               sm.WriteCallbackException (context.Response.Output, context.Error, false);\r
-                               }\r
-                               else if (context.Error != null) {\r
+                                               ScriptManager.WriteCallbackException (sm, context.Response.Output, context.Error, false);\r
+                               } else if (context.Error != null) {\r
                                        context.Response.StatusCode = 200;\r
                                        context.Response.ClearContent ();\r
-                                       sm.WriteCallbackException (context.Response.Output, context.Error, true);\r
+                                       ScriptManager.WriteCallbackException (sm, context.Response.Output, context.Error, true);\r
                                }\r
                        }\r
                }\r
index 78e889c5de7370344933374951fb216c9b2865cc..1f58c85bb6fcaf9e17860daa80eb669e76f7f658 100644 (file)
@@ -47,6 +47,7 @@ using System.Web.Script.Serialization;
 using System.Web.Script.Services;
 using System.Xml;
 using System.Collections.ObjectModel;
+using System.Web.Util;
 
 namespace System.Web.UI
 {
@@ -237,8 +238,7 @@ namespace System.Web.UI
                                if (IsDeploymentRetail)
                                        return false;
 
-                               CompilationSection compilation = (CompilationSection) WebConfigurationManager.GetSection ("system.web/compilation");
-                               if (!compilation.Debug && (ScriptMode == ScriptMode.Auto || ScriptMode == ScriptMode.Inherit))
+                               if (!RuntimeHelpers.DebuggingEnabled && (ScriptMode == ScriptMode.Auto || ScriptMode == ScriptMode.Inherit))
                                        return false;
 
                                if (ScriptMode == ScriptMode.Release)
@@ -402,7 +402,7 @@ namespace System.Web.UI
                        return GetCurrentInternal (page);
                }
 
-               static ScriptManager GetCurrentInternal (Page page)
+               internal static ScriptManager GetCurrentInternal (Page page)
                {
                        if (page == null)
                                return null;
@@ -1192,17 +1192,16 @@ namespace System.Web.UI
 
                #endregion
 
-               internal void WriteCallbackException (TextWriter output, Exception ex, bool writeMessage) {
+               internal static void WriteCallbackException (ScriptManager current, TextWriter output, Exception ex, bool writeMessage)
+               {
 #if TARGET_DOTNET
                        if (ex is HttpUnhandledException)
                                ex = ex.InnerException;
 #endif
                        HttpException httpEx = ex as HttpException;
-                       string message = AsyncPostBackErrorMessage;
+                       string message = current != null ? current.AsyncPostBackErrorMessage : null;
                        if (String.IsNullOrEmpty (message) && writeMessage) {
-                               HttpContext ctx = HttpContext.Current;
-                               
-                               if (IsDebuggingEnabled)
+                               if ((current != null && current.IsDebuggingEnabled) || (current == null && RuntimeHelpers.DebuggingEnabled))
                                        message = ex.ToString ();
                                else
                                        message = ex.Message;
index 586f02f13185334380203b656c57a35c1dad8da5..9882b1b57f04b01e37fe63143e085145bf03eb2d 100644 (file)
@@ -425,8 +425,11 @@ namespace System.Web
                                values.Add (ExceptionPageTemplate.Template_DetailsName, sb.ToString ());
                        }
                        
-                       if (showTrace)
-                               values.Add (ExceptionPageTemplate.Template_StackTraceName, HtmlEncode (baseEx.StackTrace.ToString ()));
+                       if (showTrace) {
+                               string stackTrace = baseEx.StackTrace;
+                               if (!String.IsNullOrEmpty (stackTrace))
+                                       values.Add (ExceptionPageTemplate.Template_StackTraceName, HtmlEncode (stackTrace));
+                       }
                }
                
                static string HtmlEncode (string s)