Событие ItemCommand не запускается с помощью элемента управления Repeater
Я создаю веб-сайт, с помощью которого люди, прежде чем оформить корзину покупок (и перейти в iframe оплаты), могут выбрать, какие элементы из списка корзин нужно удалить. Результаты с карты покупок перечислены в элементе управления Repeater. В репитере есть кнопка, которая удаляет запись из базы данных (для этого использовалась LINQ to SQL.)
Проблема в том, что событие ItemCommand не срабатывает, когда я нажимаю кнопку. Я попытался "response.write(test)", и он все равно не будет работать. Как будто ретранслятор не может взаимодействовать с командами. Это действительно дает результаты.
Я был бы очень признателен, если бы вы могли мне помочь, поскольку я приближался к крайнему сроку, и я исчерпал все ресурсы в Интернете, прежде чем обратиться к вам, ребята!
Вот код:
<asp:Repeater ID="RepeaterKoshnichka" runat="server" 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>
<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();
}
}
}
}
Ваша помощь очень ценится!
5 ответов
Стоит отметить, что, когда вы связываете, убедитесь, что вы связываете только если НЕ отправлять обратно (или после обработки события), иначе вы потеряете событие.
Вам нужно добавить ссылку на обработчик события onitemcommand, т.е.
OnItemCommand="RepeaterKoshnichka_ItemCommand"
У меня была похожая проблема, и ничто не решило мою проблему. В итоге (после поиска в течение очень долгого времени) я обнаружил, что текстовое поле на странице выше не проверяется, поэтому я просто добавил CausesValidation="false"
до кнопки в репитере и проблема решена.
Происходит ли пост обратно для других элементов управления на вашей странице? У вас есть какой-нибудь javascript на вашей странице, например "javascript:void(0)"?