我用VS2005做了个web版的聊天室,aspx页面上用ScriptManager 和 UpdatePanel 进行局部刷新,在 UpdatePanel 里面有个textbox,用来存储和更新聊天信息,TextMode="MultiLine",这样数据多到一定程度的时候就会出现滚动条,每当UpdatePanel 由timer 触发刷新的时候,滚动条就又跑到最上面去了,最新添加的信息就需要拖拽滚动条才能看见,能否实现刷新后,滚动条停留在刷新前的位置?
    网上搜了半天,很多人说用 textbox.scrollTop =textbox.scrollHeight; 但是一直没有实现,在后台代码中scrollTop等属性貌似都不存在,那个高手帮忙指点一下,谢谢

解决方案 »

  1.   

    这没错!后台调用
           Page.ClientScript.RegisterStartupScript(Page.GetType(), "", "document.getElementById('TextBox1').scrollTop = document.getElementById('TextBox1').scrollHeight;", true);
    TextBox1是id
      

  2.   


    page的Page_Load 和timer的 Timer1_Tick两个事件都在里面添加了,但是效果没有达到啊,好像是拉下来了一下,但是马上就上去了,只是那么一闪... 难道刷新就不行??
      

  3.   

    能写的详细一些吗?
    <script language="javascript" type="text/javascript">
         {
             function scroll(textbox)
             {
                textbox.scrollTop =textbox.scrollHeight;
             }
         }
        </script>
         我把這一段代碼放在body里,然後在body 标签属性里添加    onload="scroll(TextBox1)",这样对吗?怎么效果不行呢
      

  4.   

    哦!你是用微软的AJAX,则调用是:
    ScriptManager.RegisterStartupScript(UpdatePanel1,UpdatePanel1.GetType(),"document.getElementById('TextBox1').scrollTop = document.getElementById('TextBox1').scrollHeight;", true);
      

  5.   

    我一个页面分成了两部分 <frameset rows="*,20%">
       <frame src="display.aspx" />
       <frame src="send.aspx" />
    </frameset>
    display.aspx页面负责显示聊天内容,send.aspx负责输入聊天内容
    send.aspx页面上有个按钮的事件如下:
    string talk = TextBox2.Text;
                    string message = Session["username"].ToString() + "說 :" + talk + "\n";
                    Application.Lock();
                    Application["message"] = Application["message"].ToString() + message;
                    Application.UnLock();
                    TextBox2.Text = "";
                    TextBox2.Focus();
    然后display.aspx的page_load事件里写如下:
      TextBox1.Text = Application["message"].ToString();
    为了实现定时的局部刷新,我把display.aspx页面上的TextBox1放在一个UpdatePanel里面,用timer控件去控制,timer的事件如下:
    this.UpdatePanel1.Update();
      

  6.   

    给出我提示:
    错误 1 “RegisterStartupScript”方法没有采用“4”个参数的重载
      

  7.   

    太谢谢了,key参数的位置添加"",就可以了,刷新之后就会将滚动条置底了,呵呵,找了好久的答案呢,不过这样做还是有弊端,呵呵,查看上面信息的时候,滚动条随时可能到下面了,不过实在没有别的什么好办法了,呵呵,不知道别人有没有做过这东西,怎么做到及时刷新又能操作滚动条呢?伤脑筋...