繁体   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