簡體   English   中英

ASP.NET列表框MaintenanceScrollPositionOnPostBack重新排序底部附近的項目重新加載頂部的列表框

[英]ASP.NET listbox MaintainScrollPositionOnPostBack re-ordering items near bottom reloads listbox at top

我有一個帶有兩個列表框的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

您的問題似乎與我最近遇到的問題相似。 我傾向於說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();");


    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM