C# 使用计时器滚动备份

C# 使用计时器滚动备份,c#,javascript,jquery,C#,Javascript,Jquery,我创建了一个聊天应用程序。当我向文本框添加内容并单击Entertextaddtothedatabinder时,滚动条就会出现。我使用javascript在点击时向下滚动,这很好,但由于计时器的原因,滚动条很快就被拖到了顶部。我的代码如下 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %> <!DOCTYPE html PUBLIC "-/

我创建了一个聊天应用程序。当我向文本框添加内容并单击Entertextaddtothedatabinder时,滚动条就会出现。我使用javascript在点击时向下滚动,这很好,但由于计时器的原因,滚动条很快就被拖到了顶部。我的代码如下

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
<style type="text/css">
#kdiv1
{
    position:relative;
    left:300px;
    top:20px;
    height:400px;
    width:400px;
    overflow:auto;
}
#kdiv2
{
    position:relative;
    top:100px;
    left:300px;
}
</style>
    <script type="text/javascript">
    function scrooldown(div) {
        var scrollDiv = document.getElementById(div);
        scrollDiv.scrollTop = scrollDiv.scrollHeight;
        scrollDiv = null;
    }
    </script>
</head>
<body>
    <form id="form1" runat="server" defaultfocus="text">
    <div>
        <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true">

        </asp:ScriptManager>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true" RenderMode="Block">
        <Triggers>
        <asp:AsyncPostBackTrigger ControlID="button1" EventName="Click" />
        </Triggers>
        <ContentTemplate>
        <div id="kdiv1">
           <asp:Repeater ID="Repeater1" runat="server">
            <ItemTemplate>
            <span>
             <%# DataBinder.Eval(Container.DataItem, "Message") %> <br />
            </span>
            </ItemTemplate>
            </asp:Repeater>
        </div>
            <div id="kdiv2">
            <asp:TextBox ID="text" runat="server"/>
            <asp:Button ID="button1" runat="server" onclick="button1_Click" OnClientClick="scrooldown('kdiv1')" />
            </div>
        </ContentTemplate>
        </asp:UpdatePanel>
        </div>
    </form>
</body>
</html>

如果将div
kdiv1
移动到
UpdatePanel
周围,而不是移动到内部,则会得到更好的结果:

<div id="kdiv1">
    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true" RenderMode="Block">
        ...
    </asp:UpdatePanel>
</div>

注意:在我的示例中,我写了“scrolldown”而不是“scrolldown”,因为我认为这是一个打字错误。

有人用C#重新标记它-我没有隐私,谢谢。@jimbojw-我认为C#在我的问题中没有作用。我的错误是客户端错误,为了清楚地理解,我添加了我的C#代码,但事实上,这并不能修复我的错误。这很可能是客户端问题,但我认为通过使用所有适当的标签来标记它,您会更幸运地找到答案。一旦你开始谈论“数据绑定器”,我的眼睛就会变得呆滞,因为我不知道这是怎么回事“别担心,jimbojw,许多.net程序员无论如何都不知道客户机和服务器之间的区别。”Diodeus表示同意。MS允许在C#中定义处理程序(它以某种方式神奇地变成了JavaScript)@Kars,这并没有使它变得更容易——我更新了我的响应,使之更具体地描述
窗口。onload
代码。
<div id="kdiv1">
    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true" RenderMode="Block">
        ...
    </asp:UpdatePanel>
</div>
<script language="javascript">
    window.onload = function()
    {
        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function(sender, args) {
            scrolldown('kdiv1');
        });
    };
</script>