我有一个单独页面,页面采用这样访问:test.aspx?id=1在Page_Load里面是这样写的:        string sType = "";
        if (!Page.IsPostBack)
        {
            string id = Request.QueryString["id"];
           if(id.Tostring().Equals("1"))
             {
Response.Write("<script>");
Response.Write("document.getElementById('showMsg').innerHTML='访问成功!';");
Response.Write("</script>");
}
           } showMsg为Test.aspx里面一个id为showMsg的div元素.结果我访问的时候,出错了,提示,showMsg这个元素不存在或者为空元素。我看了一下net执行顺序,结果是先打印出script脚本,然后在加载HTML内容,导致系统找不到元素。我想知道,有那个事件是在页面HTML全部加载完毕以后,才触发的。这样这段JS代码就可以执行了

解决方案 »

  1.   

    里面一个id为showMsg的div元素-------------
    客户端的ID与服务端的ID不一定相同,客户端ID往往是由一个前缀+服务端ID组成的。
      

  2.   

    把这三句
    Response.Write("<script>");
    Response.Write("document.getElementById('showMsg').innerHTML='访问成功!';");
    Response.Write("</script>");
    改为:
    Response.Write("<script language='JavaScript'>alert('访问成功!');</script>")OK!
      

  3.   

    你应该看一下.net页面的生命周期或者过程。
    resposne.write是会先被输出的。这时js执行时 document.getElementById('showMsg') 去找 showMsg 这个html元素,因为html页面尚未加载,当然就找不到了。解决办法,一般是两种方式:
    (1)
    <div id="showMsg">asfdafdsaf</div>
    <asp:lable id="myLbl" runnat="server"/> 或者用<asp:Literal id="myLbl" runnat="server"/>  这个空件加在div后面
    然后修改cs代码,把response.write改为
    myLbl.text = "<script>document.getElementById('showMsg').innerHTML='访问成功!';</script>";(2)
    改用
    page.clientScript.RegisterStartupScript方法注册脚本代替response.write
      

  4.   

    你这样是对的,但是页面由一个专门的div来显示这个 访问成功 的,不是采用弹出的方法
      

  5.   

    生命周期及事件顺序我就不打,粘一个给你看下http://www.cnblogs.com/roamman/archive/2008/07/23/1250068.html
    从这里可以看出 激活Page类的Load事件 后还要经过好几个步聚才会 发送HTTP响应给客户端 即这时才输出html到浏览器。
    所以response.write是在最前面的。
    我在4楼的两个方法,一般常用的是方法2. 
    如果用方法1,那走了弯路,用方法1还不如直接把div改为服务器端html控件。
      

  6.   

    Page.ClientScript.RegisterClientScriptBlock