Обратная передача ASP.NET 2.0 перестает работать после первой обратной передачи - PullRequest
0 голосов
/ 11 марта 2012

У меня есть элемент управления DataList, использующий PagedDataSource, страница загружается нормально, данные отображаются нормально. У меня также есть другой DataList, который предоставляет номера страниц для подкачки.

Когда пользователь нажимает на любой из номеров страниц, если выполняет обратную передачу и увеличивает свойство PagedDataSource CurrentPage.

Это отлично работает при первом нажатии. Страница перезагружается на соответствующей странице. Однако повторное нажатие на любую страницу НЕ приводит к возникновению обратной передачи. Кажется, что страница «мерцает», но я не получаю никакого удара по кодам на стороне сервера, в отличие от того, когда я в первый раз щелкал по ней.

Я бы предположил, что первый постбэк каким-то образом испортил постбэк, но я не знаю почему.

Есть идеи по этому поводу? Вот код загрузки страницы и код привязки.

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            Trace.Write("Before BindItemsList() " + DateTime.Now.ToLongTimeString());
            this.BindItemsList();
            Trace.Write("After BindItemsList() " + DateTime.Now.ToLongTimeString());
        }
    }

private void BindItemsList()
{
        DataTable dataTable = new DataTable();
        if (Cache["dtItems"] != null)
            dataTable = (DataTable)Cache["dtItems"];
        else
            dataTable = this.GetDataTable();

        _PageDataSource.DataSource = dataTable.DefaultView;
        _PageDataSource.AllowPaging = true;
        _PageDataSource.PageSize = 9;
        _PageDataSource.CurrentPageIndex = CurrentPage;
        ViewState["TotalPages"] = _PageDataSource.PageCount;

        this.lblPageInfo.Text = "Page  " + (CurrentPage + 1) + "   of   " + _PageDataSource.PageCount;
        this.ibtnPrevious.Enabled = !_PageDataSource.IsFirstPage;
        this.ibtnNext.Enabled = !_PageDataSource.IsLastPage;
        this.ibtnFirst.Enabled = !_PageDataSource.IsFirstPage;
        this.ibtnLast.Enabled = !_PageDataSource.IsLastPage;

        this.dlProducts.DataSource = _PageDataSource;
        this.dlProducts.DataBind();
        this.doPaging();
}

protected void ibtnFirst_Click(object sender, ImageClickEventArgs e)
{
    CurrentPage = 0;
    this.BindItemsList();
}
protected void ibtnPrevious_Click(object sender, ImageClickEventArgs e)
{
    CurrentPage -= 1;
    this.BindItemsList();
}
protected void ibtnNext_Click(object sender, ImageClickEventArgs e)
{
    CurrentPage += 1;
    this.BindItemsList();
}
protected void ibtnLast_Click(object sender, ImageClickEventArgs e)
{
    CurrentPage = (Convert.ToInt32(ViewState["TotalPages"]) - 1);
    this.BindItemsList();
}
protected void dlPaging_ItemCommand(object source, DataListCommandEventArgs e)
{
    if (e.CommandName.Equals("Paging"))
    {
        CurrentPage = Convert.ToInt16(e.CommandArgument.ToString());
        this.BindItemsList();
    }
}

/// <summary>
/// Binding Paging List
/// </summary>
private void doPaging()
{
    DataTable dt = new DataTable();
    dt.Columns.Add("PageIndex");
    dt.Columns.Add("PageText");

    fistIndex = CurrentPage - 5;


    if (CurrentPage > 5)
    {
        lastIndex = CurrentPage + 4;
    }
    else
    {
        lastIndex = 9;
    }
    if (lastIndex > Convert.ToInt32(ViewState["TotalPages"]))
    {
        lastIndex = Convert.ToInt32(ViewState["TotalPages"]);
        fistIndex = lastIndex - 9;
    }

    if (fistIndex < 0)
    {
        fistIndex = 0;
    }

    for (int i = fistIndex; i < lastIndex; i++)
    {
        DataRow dr = dt.NewRow();
        dr[0] = i;
        dr[1] = i + 1;
        dt.Rows.Add(dr);
    }

    this.dlPaging.DataSource = dt;
    this.dlPaging.DataBind();
    this.dlBottomPaging.DataSource = dt;
    this.dlBottomPaging.DataBind();
}

1 Ответ

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

если вы проверяете ISpostback при загрузке страницы, получите привязку списка из области ISpostback.

...