发生错误时调用javascript函数 - ASP.NET

时间:2011-04-01 14:17:47

标签: javascript jquery .net 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,则效果很好。

思想?

4 个答案:

答案 0 :(得分:1)

当您覆盖OnError时,您需要清除错误,以便将其标记为已处理,如果您不这样做,那么它会冒出Application_Error,从而删除您网页上的任何内容已经渲染..

尝试使用Server.ClearError

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..
 }

答案 1 :(得分:0)

因为页面没有错误,因此没有触发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>";
        }

答案 2 :(得分:0)

您正在做的事情会在输出页面中生成如下代码:

<script type="text/javascript">
$(document).ready(function(){
   <script language='javascript' type='text/javascript'>alert('error')</script>;
});
</script>

这显然是错误的。您需要将script变量更改为:

script = @"alert('error')";

答案 3 :(得分:0)

你抛出一个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,始终尝试预测您期望的特定异常并相应地处理它们。实际上,总是尽量避免首先抛出异常的情况 - 在特殊情况下应该抛出异常。

阅读this CodeProject article,其中讨论了有关异常处理的一些最佳做法。