【问题标题】:ASP.NET listbox MaintainScrollPositionOnPostBack re-ordering items near bottom reloads listbox at topASP.NET 列表框 MaintainScrollPositionOnPostBack 在底部附近重新排序项目在顶部重新加载列表框
【发布时间】:2010-09-21 15:16:23
【问题描述】:

我有一个带有两个列表框的 ASP.NET (VB) 页面。标准的东西——选择左边的一个项目,点击添加按钮,它会向右移动,等等。我还有两个按钮可以在结果列表中向上或向下移动项目。我的问题是,如果我转到第二项到最后一项(或该范围内的任何一项)并将其在列表中向下移动,则列表会将滚动条重置为顶部位置。我希望重点放在升级或降级的项目上,无论它是否“在首屏”。

我的页面声明中有 MaintainScrollPositionOnPostBack,它对整个页面非常有用,虽然它对列表框没有任何作用,但这是我正在寻找的行为类型。这可以在 VB 中完成,而不使用 Javascript 或 AJAX 吗?

提前感谢您提出的任何想法或建议。代码如下:sn-p:

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

【问题讨论】:

    标签: asp.net vb.net listbox scroll maintainscrollpositionon


    【解决方案1】:

    看来您的问题与我最近遇到的问题相似。我倾向于说 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();");
    
    
        }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 2013-09-20
    • 2020-02-24
    • 1970-01-01
    • 2017-01-16
    • 2021-04-27
    相关资源
    最近更新 更多