簡體   English   中英

Page_Load問題

[英]Page_Load question

我有這個JavaScript模式,我想用於錯誤報告。 只有在頁面加載之前執行代碼的情況下,一切工作正常。 因此,結果是我的head標記之前有我的JavaScript,這意味着什么都不會執行!

有什么幫助嗎?

public void showError(string error)
{
    string script = "<script type=\"text/javascript\">$.facebox.settings.opacity = 0.4;jQuery.facebox(\""+error+"\");</script>";        
    System.Web.HttpContext.Current.Response.Write(script);        
}

順便說一句,我的ShowError方法在名為ErrorDisplay的類中,這就是我的稱呼方式:

string strErr = "error here";
            ErrorDisplay myError = new ErrorDisplay();
            myError.ShowError(strErr);

基本問題是您需要讓Javascript等待DOM准備就緒后再執行。

解決此問題的最簡單方法是使用ClientScriptManager.RegisterStartupScript方法執行代碼,而不是將其直接添加到頁面中:

public void Page_Load(Object sender, EventArgs e)
{
    Type myType = this.GetType();
    string script = "<script>alert('Hello World! I am ready.');</script>";

    Page.ClientScript.RegisterStartupScript(myType, "StartupScript", script);
}

更新

我的示例基於以下事實:您最初的問題專門針對Page_Load。 但是,只需稍微修改一下代碼即可適合您的示例:

public void ShowError(string error)
{
    StringBuilder sb = new StringBuilder();
    s.Append("<script type='text/javascript'>");
    s.Append("$.facebox.settings.opacity = 0.4;");
    s.AppendFormat("$.facebox('{0}');", error);
    s.Append("</script>");

    Type t = this.GetType();
    Page.ClientScript.RegisterStartupScript(t, "ErrorScript", sb.ToString());
}

假設您只是想稍后調用Page_Load中的代碼,請嘗試改用Page_PreRender方法。 您可以在以下位置找到事件列表及其調用順序: http://msdn.microsoft.com/zh-cn/library/aa479007.aspx

這是我實現的方式:

public void ShowError(Page CurrentPage,string error)
{
    StringBuilder sb = new StringBuilder();
    sb.Append("<script type='text/javascript'>");
    sb.Append("$.facebox.settings.opacity = 0.4;");
    sb.AppendFormat("jQuery.facebox('{0}');", error);
    sb.Append("</script>");

    Type t = this.GetType();

    CurrentPage.ClientScript.RegisterStartupScript(t, "ErrorScript", sb.ToString());
}

當我調用它(這是“錯誤字符串”)時;

謝謝大家!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM