我有一个带有两个列表框的ASP.NET(VB)页面。标准内容 - 选择左侧的项目,点击添加按钮,然后向右移动等。我还有两个按钮可以在结果列表中向上或向下移动项目。我的问题是,如果我转到第二个项目(或该范围内的任何项目)并在列表中向下移动,列表会将滚动条重置为顶部位置。我希望将重点放在升级或降级的项目上,无论它是否“在幕后”。
我的页面声明中有MaintainScrollPositionOnPostBack,它对整个页面很有用,虽然它对列表框没有任何作用,但这是我正在寻找的行为类型。这可以在VB中完成,而不需要使用Javascript或AJAX吗?
提前感谢您提出的任何想法或建议。以下代码段:
If lstToFields.SelectedIndex < lstToFields.Items.Count - 1 Then
Dim RowNum As Integer = lstToFields.SelectedIndex
Dim RowVal As ListItem = lstToFields.SelectedItem
lstToFields.Items.RemoveAt(RowNum)
lstToFields.Items.Insert(RowNum + 1, RowVal)
lstToFields.SelectedIndex = RowNum + 1
End If
答案 0 :(得分:0)
您的问题似乎与我最近的问题类似。我倾向于说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();");
}