[英]Calling a javascript function when an error occurs - ASP.NET
我在页面中重写了OnError
方法:
public string script;
protected override void OnError(EventArgs e)
{
script = "alert('error');";
}
在aspx中,我有这个:
<script type="text/javascript">
$(document).ready(function(){
<%=script %>;
});
</script>
我正在模拟Page_Load
的错误,但未触发警报。 如果我将代码从OnError
切换到OnLoad
,则效果很好。
有什么想法吗?
当您重写OnError
,需要清除错误,以便将其标记为已处理。如果不执行此操作,则它将冒泡到Application_Error
,从而破坏了页面可能呈现的任何内容。
protected override void OnError(EventArgs e)
{
script = "alert('error');";
Server.ClearError(); //Prevent the error from propagating
}
看着反射镜,您可以看到这一点。
try
{
this.Context.TempError = e;
this.OnError(EventArgs.Empty);
if (this.Context.TempError == null)
{
return true;
}
}
finally
{
this.Context.TempError = null;
}
Server.ClearError
清除该TempError
public void ClearError()
{
if (this._tempError != null)
{
this._tempError = null;
}
...other code..
}
因为页面没有错误,所以没有引发OnError事件。
还是您在强迫错误而警报仍然没有显示?
顺便说一句,取出脚本插入中的标签,然后得到警报-您已经在ASPX中定义了警报。
更新 :
这可能与调用的层次结构有关,在OnError发生之前,document.ready()被调用。
尝试将整个内容写成文字,例如:
<asp:Literal runat="server" ID="JScript" />
protected override void OnError(EventArgs e)
{
JScript.Text = "<script type=\"text/javascript\">alert('error');</script>";
}
您正在执行的操作将在输出页面中生成如下代码:
<script type="text/javascript">
$(document).ready(function(){
<script language='javascript' type='text/javascript'>alert('error')</script>;
});
</script>
这显然是错误的。 您需要将script
变量更改为:
script = @"alert('error')";
您抛出Exception
并且没有使用try / catch在页面中对其进行处理的事实意味着该页面永远不会完成渲染。 您不仅没有得到script
字符串的输出,还可能会发现没有得到$(document).ready()
或其他任何信息,因为页面未呈现。
如果您像这样处理异常,则页面渲染将完成,并且将显示您的消息。
try
{
throw new Exception();
}
catch(Exception ex)
{
// log ex.ToString() here
script = "alert('error')";
// decide what to do here - carry on or return
}
实际上,您应该尝试避免捕获Exception
,始终尝试预期会遇到的特定异常并相应地进行处理。 实际上,请始终尽量避免首先抛出异常的情况-在特殊情况下应抛出异常。
通读此CodeProject文章 ,其中讨论了有关异常处理的一些最佳实践。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.