Repeater Asp.net WebForms OnClick не работает, когда внутри ретранслятора - PullRequest
0 голосов
/ 23 мая 2018

Предыстория, я заново изобретаю нумерацию страниц, чтобы обработать вызов источника данных, на котором я могу получить только количество результатов и текущую страницу.Я знаю, на какой странице я нахожусь, я знаю, сколько страниц.Я хочу визуализировать ретранслятор с текущим выбранным элементом всегда посередине, поэтому я собираюсь перестраивать список здесь при каждой обратной передаче.По какой-то причине ни одно из моих событий нажатия не срабатываетДругие ответы на сайте исправляют это, заявляя: «Не перестраивать список при обратной передаче», но это именно то, что мне нужно сделать здесь.

Мой код ascx выглядит следующим образом:

        <asp:Repeater ID="PaginationRepeater" runat="server"
            OnItemDataBound="PaginationRepeater_ItemDataBound">
            <ItemTemplate>
                <li>
                    <asp:LinkButton ID = "PaginationLink" runat="server" 
                        Text = '<%#Container.DataItem.ToString()%>'
                        CommandArgument = '<%#Container.DataItem.ToString()%>'
                        CommandName="WasClicked"
                        OnCommand="PaginationLink_Command"
                        OnClick="PaginationLink_Click">
                    </asp:LinkButton>
                </li>
            </ItemTemplate>
        </asp:Repeater>

Свойства в игре:

public int ResultCount { get; set; }
public bool ShowPaging { get; set; }
public int PreviousPageNumber { get; set; }
public int CurrentPageNumber { get; set; }
public List<int> PageNumbers { get; set; }
public int NextPageNumber { get; set; }

Команды PaginationLink_Command и PaginationLink_Click на данный момент просто генерируют не реализованное исключение.Надеюсь, в какой-то момент я смогу поразить эти строки кода.

private void Link_Command(object sender, CommandEventArgs e)
{
    throw new NotImplementedException();
}
private void Link_Click(object sender, EventArgs e)
{
    throw new NotImplementedException();
}
protected void PaginationLink_Command(object sender, CommandEventArgs e)
{
    throw new NotImplementedException();
}
protected void PaginationLink_Click(object sender, EventArgs e)
{
    throw new NotImplementedException();
}

Надеюсь, кто-то хорошо разбирается в веб-формах и готов помочь.

Обновление: Ответ на вопрос, как я загружаю данные в ретранслятор:

public override void OnContentLoaded()
{
    base.OnContentLoaded();
    Page.LoadComplete += new EventHandler(Page_LoadComplete);
}

protected void Page_LoadComplete(object sender, EventArgs e)
{
    int currentPage = 1; // TODO: get from pagination.
    int productCount = LoadProducts(currentPage);
    LoadPager(currentPage, productCount);
}

public void LoadPager(int currentPage, int resultCount)
{
    int itemsPerPage = 9;
    int displayedPages = 9;
    ShowPaging = resultCount > itemsPerPage;
    if (!ShowPaging)
        return;

    int maxPages = (int)Math.Ceiling((decimal)(resultCount / itemsPerPage)) + 1;
    if (currentPage > maxPages)
        currentPage = maxPages;

    int start = Enumerable.Max(new[] { currentPage - (displayedPages / 2), 1 });
    int end = Enumerable.Min(new[] { start + displayedPages, maxPages });

    CurrentPageNumber = currentPage;
    PreviousPageNumber = currentPage - 1 > 1 ? currentPage - 1 : 1;
    NextPageNumber = currentPage + 1 <= maxPages ? currentPage + 1 : maxPages;
    PageNumbers = Enumerable.Range(start, end - start + 1).ToList();

    PaginationRepeater.DataSource = PageNumbers;
    PaginationRepeater.DataBind();
}

TLDR заключается в том, что я выполняю привязку во время события LoadComplete.

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