Событие ItemCommand не запускается с управлением повторителем - PullRequest
2 голосов
/ 22 февраля 2011

Я создаю веб-сайт, с помощью которого люди, прежде чем оформить корзину (и перейти к платежному фрейму), могут выбрать, какие элементы из списка корзины для покупок удалить. Результаты с карты покупок перечислены в элементе управления Repeater. В репитере есть кнопка, которая удаляет запись из базы данных (для этого использовалась LINQ to SQL.)

Проблема в том, что событие ItemCommand не срабатывает, когда я нажимаю кнопку. Я попытался response.write(test), и он все равно не будет работать.

Как будто ретранслятор не может взаимодействовать с командами. Это действительно делает результаты, хотя.

  <asp:Repeater ID="RepeaterKoshnichka" 
       runat="server" OnItemCommand="RepeaterKoshnichka_ItemCommand"
  DataSourceID="LinqDataSource1">

  <ItemTemplate>
  <tr>
  <td background="images/message-bar.gif">
  <div class="message_head" style="float:left"><cite>Производ: <asp:Label ID="lblProizvod" CssClass="red_tx" Text='<%# Eval("Proizvod") %>' runat="server"></asp:Label> / Тип на Претплата: <asp:Label ID="lblPretplata" runat="server" Text='<%# Eval("Tip") %>' CssClass="red_tx"></asp:Label></cite></div>

  <div class="message_head" style="float:right"><cite>Цена: <asp:Label ID="lblCena" CssClass="red_tx" Text='<%# Eval("Cena") %>' runat="server"></asp:Label>&nbsp;

  <asp:Button ID="Button2" CssClass="main_tx" CommandName="Delete" CommandArgument='<%# Eval("NDetID") %>' runat="server" Text="Отстрани" /></cite>  
  </div>  
  </td> 
  </tr>  
  </ItemTemplate>  
  </asp:Repeater>

  protected void RepeaterKoshnichka_ItemCommand(object source, RepeaterCommandEventArgs e)
  {
     if (e.CommandName == "Delete")
     {
        if (Request.Form[e.CommandArgument.ToString()] != null)
        {  
           if (Page.User.Identity.IsAuthenticated)
           { 
               var nar = new DataClasses1DataContext();  
               Guid detnar = new Guid(e.CommandArgument.ToString());

               var query = from c in nar.Naracka_Dets 
                           where c.NDetID == detnar
                           select c;

               foreach (var c in query) 
               { 
                 nar.Naracka_Dets.DeleteOnSubmit(c);
               }
               nar.SubmitChanges();
               lblSuma.Text = ((Button)e.CommandSource).ToString();
           }
        }
     }
  }

Ответы [ 2 ]

2 голосов
/ 23 февраля 2011

Скорее всего, <asp:GridView> будет лучшим серверным элементом управления для того, над чем вы работаете.

В качестве отступления рассмотрите возможность внесения небольших изменений в ваш код. Чтобы сделать его более читабельным, объедините 3 условия в одно if:

 if (e.CommandName == "Delete" &&
     Request.Form[e.CommandArgument.ToString()] != null &&
     Page.User.Identity.IsAuthenticated)
 {
     //delete things.
 }
1 голос
/ 22 февраля 2011

Если вы не привязаны к использованию Repeater, вам следует переключиться на DataGrid и использовать ButtonColumn для этой функции - это облегчит вам жизнь при обработке событий Item.

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