Page_Load问题

时间:2010-07-27 12:14:23

标签: c# asp.net

我有这个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);

3 个答案:

答案 0 :(得分:3)

基本问题是你需要让你的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());
}

答案 1 :(得分:2)

假设您希望稍后调用Page_Load中的代码,请尝试使用 Page_PreRender 方法。 您可以在此处找到事件列表及其调用顺序http://msdn.microsoft.com/en-us/library/aa479007.aspx

答案 2 :(得分:1)

这就是我实现它的方式:

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());
}

当我调用它时(这是“错误字符串”);

非常感谢你们!