Asp.net
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其中有兩個重要欄位:
- 命令名
- 命令參數
所以,一個簡單的例子:
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 } }