ASP.Net: warum ist mein Knopf-Klick/Befehl-Veranstaltungen nicht verbindlich/Entlassung in einen repeater?
Hier ist der code aus dem ascx-hat der repeater:
<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>
Und in der codebehind-für den repeater ist Datenbindung und Veranstaltungen:
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
Weder das klicken oder Befehl wird immer aufgerufen, was mache ich falsch?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kontrollen verschachtelte innerhalb der Repeater nicht abfangen Veranstaltungen. Statt Sie zu binden, müssen die
Repeater.ItemCommand
Veranstaltung.ItemCommand -
enthältRepeaterCommandEventArgs
, die hat zwei wichtige Felder:So, ein triviales Beispiel:
Müssen Sie behandeln die ItemCommand-Ereignis auf Ihrem Repeater. Hier ist ein Beispiel.
Dann Ihr button klickt, wird von den ListOfEmails_ItemCommand Methode. Ich glaube nicht, dass die Verkabelung bis das Klicken oder den Befehl Ereignis (der Schaltfläche) im ItemDataBound arbeiten.
Wenn Sie planen, zu verwenden ItemCommand-Ereignis, stellen Sie sicher, dass Sie sich registrieren, um ItemCommand-Ereignis in Page_Init nicht in Page_Load.
Ich bin nicht sicher, warum es nicht funktioniert für mich bei diesem event angemeldet im Page_Load-aber bewegt es zu Page_Init geholfen.
Hier ist für Sie ein experiment zu versuchen:
Legen Sie einen Haltepunkt auf ListOfEmails_ItemDataBound und sehen, wenn es aufgerufen wird, für postbacks.
Wissen Sie, was frustrierend ist, über diese?
Wenn Sie angeben, dass ein OnClick-in, dass asp:Button-tag, die bauen wird stellen Sie sicher, dass die benannte Methode besteht in der codebehind-Klasse, und melden einen Fehler, wenn es nicht... obwohl, die Methode wird nie aufgerufen.