ASP.Net / C # - проблема пейджера обратной передачи Ajax - PullRequest
0 голосов
/ 13 сентября 2010

У меня есть страница «Магазин», где перечислены все товары в магазине.У меня есть функция сортировки, чтобы решить, сколько результатов пр.страницу, которую я хочу увидеть.

У меня также есть пейджер.Пейджер состоит из двух кнопок (кнопка «Предыдущая» и «Следующая страница») и текстового поля, в котором отображается номер страницы.Пейджер находится как вверху, так и внизу страницы.

Когда я изменяю текст в текстовом поле, запускается следующий код:

protected void tbPageNumberTop_TextChanged(object sender, EventArgs e)
    {
        tbPageNumberBottom.Text = tbPageNumberTop.Text;
        updpanMain.Update();
    }

Это вызывает загрузку страницы, где яполучить число из текстового поля и разобрать его в целое число, которое я могу использовать для динамического создания запроса SQL.Это работает просто отлично.

Вот моя проблема.Когда я нажимаю кнопку «Далее» или «Предыдущий», текст в текстовом поле изменяется, но когда я получаю число из текстового поля, я получаю значение текстового поля таким, каким оно было ДО нажатия кнопки.Как получить правильный номер страницы?

Вот мой Click-код:

protected void btnNextPage_Click(object sender, EventArgs e)
    {
        int PageNumber = Convert.ToInt32(tbPageNumberTop.Text);
        PageNumber += 1;
        tbPageNumberTop.Text = PageNumber.ToString();
        tbPageNumberBottom.Text = PageNumber.ToString();
        updpanMain.Update();
    }
    protected void btnPrevPage_Click(object sender, EventArgs e)
    {
        int PageNumber = Convert.ToInt32(tbPageNumberTop.Text);
        PageNumber -= 1;
        tbPageNumberTop.Text = PageNumber.ToString();
        tbPageNumberBottom.Text = PageNumber.ToString();
        updpanMain.Update();
    }

А вот что происходит на page_load

if (!this.IsPostBack)
        {
            intStartPosition = 0;
            intPageNumber = 1;
            tbPageNumberBottom.Text = intPageNumber.ToString();
            tbPageNumberTop.Text = intPageNumber.ToString();
        }

        if (tbPageNumberTop.Text != "1" || tbPageNumberBottom.Text != "1")
        {
            intPageNumber = Convert.ToInt32(tbPageNumberTop.Text);
        }
        else
        {
            intPageNumber = 1;
        }


        intStartPosition = (intPageNumber * intItemsPrPage) - intItemsPrPage;
        strResultsPrPage = intItemsPrPage.ToString();

intStartPosition представляет первое целое число LIMITв моей строке SQL, а strResultsPrPage представляет второе целое число, то есть LIMIT 100, 500 показывает результаты от 500 до 600. (Страница 5, 100 результатов на странице)

Ответы [ 2 ]

1 голос
/ 14 сентября 2010

Ваше событие Page_Load будет срабатывать до события Click вашей кнопки.Похоже, вы устанавливаете параметры, используемые в вашем вызове SQL (intStartPosition и strResultsPrPage) в событии Page_Load на основе значения, извлеченного из текстового поля (tbPageNumberTop.Text) до того, как событие Click сможет обновить это значение.

Вам нужно будет найти способ отложить этот вызов SQL до тех пор, пока у ваших событий Click не будет возможности обновить текущее значение страницы.

Возможно, вы захотите взглянуть на страницуЖизненный цикл для уточнения:

http://msdn.microsoft.com/en-us/library/ms178472.aspx

0 голосов
/ 14 сентября 2010

Проблема решена.

Я сделал следующее:

В коде page_load я написал следующее:

protected void Page_Load(object sender, EventArgs e)
    {
        Page.LoadComplete += new EventHandler(Page_LoadComplete);
    }

А потом я вставил старый кодовый блок page_load в новый обработчик событий, он работает как шарм.

...