[英]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.