【问题标题】:ItemCommand of Repeater is not fire with LinkButton中继器的 ItemCommand 不使用 LinkBut​​ton 触发
【发布时间】:2012-03-01 20:40:22
【问题描述】:

我在转发器中有一个链接按钮,我想在用户单击链接按钮时删除该项目;在这种情况下,不会触发 LinkBut​​ton 的 ItemCommand 事件,我的代码如下:

<asp:Repeater ID="rptSubject" runat="server" OnItemCommand="rptSubject_OnItemCommand">
        <ItemTemplate>
          <tr>
           <td><asp:CheckBox id="chkAll" runat="server"/></td>
            <td><%#Eval("SubjectName") %></td>
            <td> 
                <asp:ImageButton ID="imgbtnDelete" ImageUrl="~/assets/images/icons/delete.png" runat="server" CommandName="Delete" CommandArgument='<%#Eval("SubjectID") %>'/>
               <asp:LinkButton ID="lnkEditCategory" runat="server" CommandName="EditCategory" CommandArgument='<%#Eval("SubjectID") %>' Text="Edit Category"></asp:LinkButton> 

             </td>
          </tr>
     </ItemTemplate>

我的中继器的 itemcommand 事件处理程序是:

    protected void rptSubject_OnItemCommand(object source, RepeaterCommandEventArgs e)
{

    if (e.CommandName.Equals("Delete"))  
    {
        // some code
    }

    if (e.CommandName.Equals("EditCategory")) 
    {
   // some code
    }

}

当我单击图像按钮时,我的项目命令事件会触发,但当我单击链接按钮时却不会。

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    以下代码适用于我:

    <%@ Page Language="C#" %>
    <script type="text/c#" runat="server">
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                var data = new[]
                {
                    new 
                    {
                        SubjectID = "1",
                        SubjectName = "subject name 1" 
                    },
                    new 
                    {
                        SubjectID = "2",
                        SubjectName = "subject name 2" 
                    },
                };
                rptSubject.DataSource = data;
                rptSubject.DataBind();
            }
        }
    
        protected void RptSubject_OnItemCommand(object source, RepeaterCommandEventArgs e)
        {
            if (e.CommandName.Equals("Delete"))
            {
                // some code
            }
    
            if (e.CommandName.Equals("EditCategory"))
            {
                // some code
            }
        }    
    </script>
    <!DOCTYPE html>
    <html>
    <head>
        <title></title>
    </head>
    <body>
        <form id="Form1" runat="server">
            <asp:Repeater ID="rptSubject" runat="server" OnItemCommand="RptSubject_OnItemCommand">
                <ItemTemplate>
                    <div>
                        <asp:CheckBox id="chkAll" runat="server"/>
                        <%#Eval("SubjectName") %>
                        <asp:LinkButton ID="imgbtnDelete" runat="server" CommandName="Delete" CommandArgument='<%#Eval("SubjectID") %>' Text="Delete" />
                        <asp:LinkButton ID="lnkEditCategory" runat="server" CommandName="EditCategory" CommandArgument='<%#Eval("SubjectID") %>' Text="Edit" />
                    </div>
                </ItemTemplate>
            </asp:Repeater>
        </form>
    </body>
    </html>
    

    【讨论】:

      【解决方案2】:

      您还需要确保明确绑定到中继器

      Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
          AddHandler rptPages.ItemCommand, AddressOf rptPages_ItemCommand
      End Sub
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-10
        • 2011-03-31
        • 2020-12-26
        • 1970-01-01
        • 2012-12-12
        相关资源
        最近更新 更多