2009-09-01 13 views
4

In Visual Studio 2008 zeigt, wenn Sie eine neues "Ajax 1.0 aktiviert ASP.NET 2.0 Web Application" erstellen und fügen Sie den folgenden Code ein:Update-Panel nicht Fehler in ASP.NET 3.5

<form id="form1" runat="server"> 
     <asp:ScriptManager ID="ScriptManager1" runat="server" /> 
     <div> 
     <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
      <ContentTemplate> 
       <asp:Button runat="server" ID="foo" Text="click me" onclick="foo_Click" />  
      </ContentTemplate> 
     </asp:UpdatePanel> 
     </div> 
    </form> 

Code hinter

protected void foo_Click(object sender, EventArgs e) { 
      throw new Exception("hello"); 
     } 

und klicken Sie dann auf die Schaltfläche, Sie sehen eine JavaScript-Warnung, die "Hallo" sagt. Wenn Sie eine .NET 3.5-Webanwendung erstellen und denselben Code einfügen, wird keine Warnung mehr angezeigt. Was vermisse ich?

+0

Also ... niemand benutzt .NET 3.5, oder niemand macht sich Sorgen um Fehler? :) – aquinas

Antwort

6

Es gab definitiv eine Änderung zwischen dem Standardverhalten in den ASP.NET AJAX Extensions 1.0 und ASP.NET AJAX 3.5. Sie können dies anhand der standardmäßigen EndPostBack-Ereignishandler für Sys.WebForms.PageRequestManager sehen. Die frühere Version zeigt den Fehler unter Verwendung einer Warnung an, während der Fehler den Fehler gerade erst wiederholt.

// ASP.NET AJAX Extensions 1.0 
function Sys$WebForms$PageRequestManager$_endPostBack(error, response) { 
    this._processingRequest = false; 

    this._request = null; 
    this._additionalInput = null; 

    var handler = this._get_eventHandlerList().getHandler("endRequest"); 
    var errorHandled = false; 
    if (handler) { 
    var eventArgs = new Sys.WebForms.EndRequestEventArgs(error, this._dataItems, response); 
    handler(this, eventArgs); 
    errorHandled = eventArgs.get_errorHandled(); 
    } 
    this._dataItems = null; 
    if (error && !errorHandled) { 
    alert(error.message); 
    } 
} 


// ASP.NET 3.5 
function Sys$WebForms$PageRequestManager$_endPostBack(error, executor, data) { 
    if (this._request === executor.get_webRequest()) { 
    this._processingRequest = false; 
    this._additionalInput = null; 
    this._request = null; 
    } 
    var handler = this._get_eventHandlerList().getHandler("endRequest"); 
    var errorHandled = false; 
    if (handler) { 
    var eventArgs = new Sys.WebForms.EndRequestEventArgs(error, data ? data.dataItems : {}, executor); 
    handler(this, eventArgs); 
    errorHandled = eventArgs.get_errorHandled(); 
    } 
    if (error && !errorHandled) { 
    throw error; 
    } 
} 

Wenn Sie die Warnung erscheinen in Ihrem ASP.NET AJAX 3.5 Code möchten, müssen Sie nur ein paar kleine Änderungen vorzunehmen.

Zuerst müssen Sie einen Handler für das AsyncPostBackError-Ereignis des ScriptManagers hinzufügen und dann die AsyncPostBackErrorMessage festlegen.

protected void ScriptManager1_AsyncPostBackError(object sender, AsyncPostBackErrorEventArgs e) 
{ 
    ScriptManager1.AsyncPostBackErrorMessage = e.Exception.Message; 
} 

Anschließend müssen Sie einen Handler für das endRequest-Ereignis des clientseitigen PageRequestManagers hinzufügen. Dort können Sie den AsyncPostBackErrorMessage-Wert auf der Serverseite festlegen und eine Warnung verwenden, um die Nachricht für den Benutzer anzuzeigen.

function pageLoad() 
{ 
    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(onEndRequest); 
} 

function onEndRequest(sender, args) 
{ 
    var msg = args.get_error().message; 
    alert(msg); 
    args.set_errorHandled(true); 
} 

Ich hoffe, das hilft.

+0

Also ich bin nicht verrückt. Vielen Dank! – aquinas

14

Wenn Sie nur den Browser JavaScript-Fehler beheben mögen, und die Ausnahmemeldung an den Benutzer anzuzeigen, benötigen Sie nur diese irgendwo nach der Form Erklärung zu Ihrer Masterpage hinzuzufügen:

<!-- This script must be placed after the form declaration --> 
<script type="text/javascript"> 
    Sys.Application.add_load(AppLoad); 

    function AppLoad() { 
     Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequest); 
    } 

    function EndRequest(sender, args) { 
     // Check to see if there's an error on this request. 
     if (args.get_error() != undefined) { 

      var msg = args.get_error().message.replace("Sys.WebForms.PageRequestManagerServerErrorException: ", ""); 

      // Show the custom error. 
      // Here you can be creative and do whatever you want 
      // with the exception (i.e. call a modalpopup and show 
      // a nicer error window). I will simply use 'alert' 
      alert(msg); 

      // Let the framework know that the error is handled, 
      // so it doesn't throw the JavaScript alert. 
      args.set_errorHandled(true); 
     } 
    } 
</script> 

Sie brauchen nicht zu fangen Sie den OnAsyncPostBackError ab, es sei denn, Sie möchten die Nachricht anpassen. Go to my blog post if you want more information about this.

+0

Danke dafür !!!! – Luis

+0

Hat mir auch geholfen. Vielen Dank. –

Verwandte Themen