ASP.NET listbox MaintainScrollPositionOnPostBack переупорядочение элементов в нижней части перезагружает список в верхней части - PullRequest
0 голосов
/ 21 сентября 2010

У меня есть страница ASP.NET (VB) с двумя списками.Стандартный материал - выберите элемент слева, нажмите кнопку «Добавить», и он перемещается вправо и т. Д. У меня также есть две кнопки для перемещения элементов вверх или вниз в результирующем списке.Моя проблема в том, что если я перейду ко 2-му последнему элементу (или любому другому в этом диапазоне) и переместу его вниз по списку, список сбросит полосу прокрутки в верхнюю позицию.Я хочу, чтобы фокус был на элементе, который был повышен или понижен в должности, независимо от того, находится ли он «ниже сгиба» или нет.

У меня есть 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

1 Ответ

0 голосов
/ 28 октября 2010

Похоже, ваша проблема похожа на ту, что была у меня недавно.Я склонен сказать, что PostBack - это ваша проблема, и вам придется обрабатывать позицию прокрутки с помощью JavaScript.Мое решение было следующим:

Создайте HiddenField на странице ASPX для хранения текущей позиции ScrollBar.

<code>
< asp : HiddenField ID ="hdnScollTop" EnableViewState =true runat="server" /></p>

<p>

Создание функций JavaScript в теге для сохранения и загрузки значения из HiddenField, которое вы получаете и устанавливаете с помощью позиции прокрутки.У меня также была функция Updatelist (), которую я должен был использовать для моего множественного выбора ListBox.

<code></p>


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.
}


<p>

В 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();");


    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...