ASP.Net:为什么我的按钮的点击/命令事件没有在转发器中绑定/触发?

这是来自ascx的具有中继器的代码:
<asp:Repeater ID="ListOfEmails" runat="server" >
    <HeaderTemplate><h3>A sub-header:</h3></HeaderTemplate>
    <ItemTemplate>
        [Some other stuff is here]
        <asp:Button ID="removeEmail" runat="server" Text="X" ToolTip="remove" />
    </ItemTemplate>
</asp:Repeater>

在中继器的数据绑定和事件的代码中:

Protected Sub ListOfEmails_ItemDataBound(ByVal sender As Object,ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles ListOfEmails.ItemDataBound
    If (e.Item.ItemType = ListItemType.Item) Or (e.Item.ItemType = ListItemType.AlternatingItem) Then
        Dim removeEmail As Button = CType(e.Item.FindControl("removeEmail"),Button)
        removeEmail.CommandArgument = e.Item.ItemIndex.ToString()

        AddHandler removeEmail.Click,AddressOf removeEmail_Click
        AddHandler removeEmail.Command,AddressOf removeEmail_Command
    End If
End Sub

Sub removeEmail_Click(ByVal sender As Object,ByVal e As System.EventArgs)
    Response.Write("<h1>click</h1>")
End Sub

Sub removeEmail_Command(ByVal sender As Object,ByVal e As CommandEventArgs)
    Response.Write("<h1>command</h1>")
End Sub

点击或命令都没有被调用,我做错了什么?

解决方法

嵌套在中继器内部的控件不会拦截事件.相反,您需要绑定到Repeater.ItemCommand事件.

ItemCommand包含RepeaterCommandEventArgs,它有两个重要的字段:

> CommandName
> CommandArgument

所以,一个微不足道的例子:

void rptr_ItemDataBound(object sender,RepeaterItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
            {
                // Stuff to databind
                Button myButton = (Button)e.Item.FindControl("myButton");

                myButton.CommandName = "Add";
                myButton.CommandArgument = "Some Identifying Argument";
            }
        }

void rptr_ItemCommand(object source,RepeaterCommandEventArgs e)
        {
            if (e.CommandName == "Add")
            {
                // Do your event
            }
        }

编辑:Markdown完全希望我的缩进,哦,我应该停止在这个文本框中编写代码.

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....