【问题标题】:ItemCommand event doesn't fire with the Repeater controlItemCommand 事件不会与 Repeater 控件一起触发
【发布时间】:2011-02-21 20:49:45
【问题描述】:

我正在建立一个网站,人们在结账购物车(并转移到支付 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>&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();
            }
        }
    }
}

非常感谢您的帮助!

【问题讨论】:

标签: c# asp.net repeater itemcommand


【解决方案1】:

您需要添加 onitemcommand 事件处理程序链接,即

OnItemCommand="RepeaterKoshnichka_ItemCommand"

【讨论】:

  • 是的,我也试过了。我在这里发布之前做了一些编辑,所以我一定忘记将它添加回 html 中。还有其他建议吗??
  • 您使用的是哪个版本的 .NET 框架?过时的版本(v1.1 及更低版本)曾经存在无法在某些机器上触发事件的问题,这些问题已在服务包中得到解决。
  • 我会考虑查看生成的输出/html 并查看呈现的内容。如果事件连接正确,它应该会按预期触发。
  • 是的,我确实浏览了呈现的 html,它看起来还不错。有趣的是,我在工作时遇到了一些问题,现在我在家里尝试它。你知道问题可能是什么吗?代码看起来正确吗?顺便说一句,感谢您为帮助我所做的努力。非常感谢
  • 是的,这里一切都很好。尝试创建一个新项目并将其简化为只有一个中继器和一个按钮。将转发器绑定到 List (或任何你想要的),看看你是否可以让事件触发。然后从那里往回走。
【解决方案2】:

【讨论】:

    【解决方案3】:

    有一点需要注意,当您绑定时,请确保您仅在未回发(或在您处理了事件之后)时才进行绑定,否则您将丢失该事件。

    【讨论】:

      【解决方案4】:

      回帖是否针对您页面上的任何其他控件进行?您的页面上是否有任何 javascript,例如“javascript:void(0)”?

      【讨论】:

      • 没有那种东西。我只有一个 LinqDataSource 控件一个中继器和一个 iframe,它由中继器外部的按钮触发
      【解决方案5】:

      我遇到了一个类似的问题,但没有解决我的问题。最后(在搜索了很长时间之后)我发现我在页面上有一个更高的文本字段没有验证,所以我只是将CausesValidation="false" 添加到转发器中的按钮并解决了问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多