Обрабатывать сообщения об ошибках асинхронного с ScriptManager - PullRequest
2 голосов
/ 05 августа 2011

Эта вещь сводит меня с ума. Я пытаюсь перехватить исключительную ситуацию на стороне сервера во время частичной обратной передачи, установив сообщение об ошибке, которое будет отображаться на клиенте в предупреждении JavaScript.

Но я просто получаю следующую ошибку на консоли Firefox:

uncaught exception: [Exception... "'Sys.WebForms.PageRequestManagerServerErrorException: Sys.WebForms.PageRequestManagerServerErrorException: Tentativo di divisione per zero.' when calling method: [nsIDOMEventListener::handleEvent]" nsresult: "0x8057001c (NS_ERROR_XPC_JS_THREW_JS_OBJECT)" location: "JS frame :: resource://firebug_rjs/net/spy.js :: callPageHandler :: line 796" data: no]

и вообще никаких предупреждений.

Я столкнулся с этой проблемой в сложном проекте, который включает компоненты Telerik, но я сократил проблему до ее основ, , следуя этому простому примеру , и проблема все еще существует.

Дело:

Default.aspx

<form id="form1" runat="server">
<asp:ScriptManager ID="scriptManager" runat="server" OnAsyncPostBackError="scriptManager_OnAsyncPostBackError"></asp:ScriptManager>
<div>
    <asp:UpdatePanel ID="upd" runat="server">
        <ContentTemplate>
            <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
            <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
            <asp:Button ID="btnSend" runat="server" Text="Send" OnClick="btnSend_OnClick" />
        </ContentTemplate>
    </asp:UpdatePanel>
</div>
</form>

Default.aspx.cs

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

protected void btnSend_OnClick(object sender, EventArgs e) 
{
    // this will throw and Exception
    int aa = Convert.ToInt32(TextBox1.Text) / Convert.ToInt32(TextBox2.Text);
}

Я пробовал с VS2010 / .NET 4.0 и с VS2008 / .NET 3.5, в Firefox и Internet Explorer, проблема та же.

Пожалуйста, у кого-нибудь есть идеи?

1 Ответ

2 голосов
/ 05 августа 2011

В дополнение к обработке логики на стороне сервера необходимо добавить скрипт для обработки ошибок на стороне клиента.

 <script>
        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
        function EndRequestHandler(sender, args) {
            if (args.get_error() != undefined) {
                alert(args.get_error());
            }
        }
    </script>

Этот скрипт обрабатывает событие end_Request, и, если произошла какая-то ошибка, выдается предупреждение.

...