看来您的问题与我最近遇到的问题相似。我倾向于说 PostBack 是你的问题,你必须用 JavaScript 处理滚动位置。我的解决方案如下:
在 ASPX 页面中创建一个 HiddenField 来保存 ScrollBar 的当前位置。
< asp : HiddenField ID ="hdnScollTop" EnableViewState =true runat="server" />
在标签中创建 JavaScript 函数以保存和加载 HiddenField 中的值,您可以使用它来获取和设置滚动位置。我还有一个 Updatelist() 函数,我必须将它用于我的多选 ListBox。
function Updatelist() {
//details removed
}
function GetListBoxScrollPosition(){
var sel = document.getElementById('<%=lstbxStuff.ClientID%>');
var hdnScrollTop = document.getElementById('<%=hdnScollTop.ClientID %>');
hdnScrollTop.innerText=sel.scrollTop;
}
function SetListBoxScrollPosition(){
var sel = document.getElementById('<%=lstbxStuff.ClientID%>');
var hdnScrollTop = document.getElementById('<%=hdnScollTop.ClientID %>');
sel.scrollTop=hdnScrollTop.value; //not sure why it's in value when I clearly put it in innerText. This is what works.
}
在 Form_Load 中,注册 JavaScript 函数,并初始化 HiddenField 值。在代码隐藏的 Page_Load 中,我设置了所有脚本。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindACLs();
//I use the hidden field to set the lstbxStuff
//scroll bar, which will scroll to the top anyway.
//This is to avoid a JavaScript error.
hdnScollTop.Value = "0";
}
else
{
lstbxStuff.Focus();
}
lstbxACLs.Attributes.Add("onclick", "GetListBoxScrollPosition();Updatelist();");
lstbxACLs.Attributes.Add("onfocus", "SetListBoxScrollPosition();");
}