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