这件事让我发疯了。我试图在部分回发期间拦截异常服务器端,在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组件的复杂项目中遇到此问题,但我已将问题简化为基础following this simple example,问题仍然存在。
案例:
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中,问题是一样的。
拜托,有人有想法吗?
答案 0 :(得分:2)
除了处理服务器端的逻辑外,还必须添加脚本以便在客户端处理错误。
<script>
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
function EndRequestHandler(sender, args) {
if (args.get_error() != undefined) {
alert(args.get_error());
}
}
</script>
此脚本正在处理end_Request事件,如果有一些错误触发警报。