Как остановить переход страницы и сохранить позицию панели и прокрутки браузера, когда пользователь нажимает на элемент списка данных? - PullRequest
1 голос
/ 07 марта 2012

У меня есть список данных внутри панели

<asp:Panel ID="Panel1" runat="server"  ScrollBars="Vertical">
  <asp:DataList ID="DataList1" runat="server" RepeatDirection="Horizontal"  OnItemDataBound="DataList1_ItemDataBound" CaptionAlign="Left">
    <ItemTemplate>
       <asp:ImageButton ID="btn1" runat="server" ImageUrl='<%#"~/Images.ashx?Name=" +DataBinder.Eval(Container.DataItem, "Path") %>'
           OnCommand="Item_Command" CommandArgument='<%# Eval("Id").ToString() +";"+Eval("Path")%>' />
    </ItemTemplate>
  </asp:DataList>
</asp:Panel>

В Item_Command я добавляю стиль для btn1, такой как рамка и цвет, и получаю идентификатор выбранного элемента

string[] str = e.CommandArgument.ToString().Split(';');
Id = Convert.ToInt32(str[0]);

Когда я выбираю элемент, страница прыгает, предположим, что я прокрутил браузерную полосу прокрутки вниз и выбрал прокрутку браузера изображений, идущую сверху и снова идущую внизу. По Item_Command я включаю и отключаю несколько других btn, которые находятся за пределамиdatalist, если я храню datalist внутри панели обновлений, то все остальные btn не включаются и не отключаются, поэтому я не использую панель обновления.У меня есть все элементы управления внутри панели обновления.Я попытался с помощью как сохранить позицию прокрутки браузера после того, как сработало любое событие , но оно не работает, я устанавливаю

Page.MaintainScrollPositionOnPostBack = true;
AutoEventWireup="true"

, что также не работает для меня.Я использую VS 2010, 4.0 с C #.

Кто-то, пожалуйста, подскажет мне, как остановить переход по страницам и поддерживать положение как панели1, так и позиции прокрутки браузера, когда пользователь нажимает на элемент списка данных?

спасибо заранее..

Ответы [ 3 ]

2 голосов
/ 07 марта 2012

Используйте функцию на стороне клиента для события клика Клиента на кнопке с изображением, например:

javascript: void (0);

, у меня это работает в панели обновления,

<asp:ImageButton OnClientClick="javascript:void(0);" ID="btn1" runat="server" ImageUrl="~/Help2.png" AlternateText="asas"/>

Редактировать

  1. Поместить кнопку и список данных в панель обновления.Установите

UpdateMode = Условный

для udpatePanel.

  1. Когда вы выполняете свою операцию над строкой dataList.Просто обновите панель обновления вручную, как это

// Событие кнопки вашего изображения

YourUpdatePanel.Update();

Это в сочетании с тем, что я опубликовалраньше должен решить вашу проблему.Кроме того, вам может не понадобиться MainScrollPositionOnPostBack = true, используя приведенное выше.

Damien.

1 голос
/ 07 марта 2012

Хорошо, вот мысль: используйте одну большую панель обновлений, которая занимает всю страницу, чтобы поддерживать прокрутку страницы, ИЛИ используйте несколько панелей обновления, чтобы охватить все элементы, которые вы хотите обновить!

0 голосов
/ 07 марта 2012

Попробуйте установить MaintainScrollPositionOnPostback true в теге страницы:

 <%@ Page (...) MaintainScrollPositionOnPostback="true" (...) %> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...