Кнопка Link внутри Repeater для подкачки ASP.Net - PullRequest
6 голосов
/ 26 февраля 2010

Я делаю веб-страницу с поиском, который приносит много информации из MSSQL. То, что я сделал, это хранимая процедура, которая возвращает только ту страницу, которую можно увидеть на сайте.

Сейчас я работаю над подкачкой страниц, поскольку мне нужно показать нечто похожее на Google. Если вы находитесь на странице 1, они показывают первые 10 страниц, а если вы находитесь на странице 19, они показывают, начиная со страницы 9 до 28.

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

Делая быстрый пример, я назначил ArrayList для repeatater.datasource:

  <asp:Repeater ID="Repeater2" runat="server">
    <ItemTemplate>
            <asp:LinkButton ID="LinkButton1" runat="server" CommandArgument="<%# Container.DataItem %>"><%# Container.DataItem %></asp:LinkButton>
    </ItemTemplate>
  </asp:Repeater>
  <asp:LinkButton ID="LinkButton2" runat="server" CommandArgument="4654">Test #1</asp:LinkButton>

В моем файле Default.aspx.cs у меня есть следующий код

    protected void Page_Load(object sender, EventArgs e)
    {
        if (this.IsPostBack)
        {
            string x = LinkButton2.CommandArgument;
            //string y = LinkButton1.CommandArgument;
//I know this line will not work since the Linkbutton1 is inside the Repeater.
            }

Что мне сделать, чтобы это заработало?

У кого-нибудь есть лучшее решение для этой подкачки?

Спасибо

Jerry

Ответы [ 4 ]

9 голосов
/ 26 февраля 2010

Вы ищете событие ItemCommand:

  <asp:Repeater ID="Repeater1" OnItemCommand="ItemCommand" runat="server">
    <ItemTemplate>
      <asp:LinkButton CommandName="ButtonEvent" CommandArgument="<%# Container.DataItem %>" Text="<%#Container.DataItem %>" runat="server"></asp:LinkButton>
    </ItemTemplate>
  </asp:Repeater>

Код:

protected void Page_Load(object sender, EventArgs e)
{
  if (!Page.IsPostBack)
  {
    Repeater1.DataSource = Enumerable.Range(1, 10);
    Repeater1.DataBind();
  }
}

protected void ItemCommand(Object Sender, RepeaterCommandEventArgs e)
{
  Response.Write("The no. " + ((LinkButton)e.CommandSource).Text + " button was clicked!");
}

... но вы действительно уверены, что нуждаетесь в LinkButton? Простой HTML-тег привязки может работать так же хорошо, и это не так просто. :)

0 голосов
/ 11 июля 2012

Я использовал @JakobGade, и вот что у меня сработало:

<asp:Repeater ID="rpMemList" runat="server" ClientIDMode="Static" 
onitemcommand="rpMemList_ItemCommand">
     <ItemTemplate>

          <asp:LinkButton ID="lbMember" CommandArgument='<%# Eval("memID")%>' CommandName="SelMem" runat="server" ClientIDMode="Predictable"><%# Eval("memFullName")%></asp:LinkButton>

     </ItemTemplate>
</asp:Repeater>

Затем проверил это в коде:

    protected void rpMemList_ItemCommand(object source, RepeaterCommandEventArgs e)
    {
        string a = e.CommandArgument.ToString();
        string b = e.CommandName.ToString();
        string c = e.CommandSource.ToString();
        string d = e.Item.ToString();

    }
0 голосов
/ 26 февраля 2010

Вы никогда не указывали, какой тип управления это у вас подкачки. Если вы используете ASP.Net 3.5, я НАСТОЯТЕЛЬНО рекомендую использовать элемент управления ListView и обрабатывать подкачку с помощью элемента управления DataPager.

0 голосов
/ 26 февраля 2010

Просто подумайте, вы пытались использовать объект «DataGrid», добавив столбец, сделав его шаблоном элемента, а затем вставив элементы, которые необходимо повторить в отформатированном шаблоне. DataGrid также автоматически обрабатывает подкачку, когда установлено значение true ...

...