asp.net vb.net onclick repeater itemcommand

asp.net - ¿Cómo disparar un evento de botón desde dentro de un repetidor?



vb.net onclick (2)

He hecho mi investigación pero no puedo encontrar una manera eficiente de hacer lo siguiente en VB :

  • Cada botón debe disparar el mismo evento.
  • El evento de botón guarda cada elemento de repetidor y, por lo tanto, cada evento no es único.

Soy consciente de que puedo usar la opción ItemCommand pero no he podido hacer que funcione como se desea.

ASP.NET

Elemento interior del repetidor

<asp:Button ID="btnSave" RunAt="Server"/>

VB.NET

Protected Sub btnSave_Click(ByVal sender As Object, ByVal e As System.EventArgs) sqlConn.Open() For Each Item As RepeaterItem In rpt.Items ... Next sqlConn.Close() End Sub


Cuando el botón está dentro de una plantilla Repeater, debe agregar el evento OnClick, puede agregar un evento en el ItemDataBound event del control Repeater.

Su código .aspx se verá más o menos así:

<asp:Repeater ID="Repeater1" runat="server"> <ItemTemplate> <asp:Button ID="btnSave" runat="server" Text="SomeText" /> </ItemTemplate> </asp:Repeater>

código detrás

void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == Repeater1.AlternatingItem || e.Item.ItemType == Repeater1.Item) { var btn = e.Item.FindControl("btnSave") as Button; if (btn != null) { // adding button event btn.Click += new EventHandler(btn_Click); } } } void btn_Click(object sender, EventArgs e) { //write your code }

en vb.net

Private Sub Repeater1_ItemDataBound(sender As Object, e As RepeaterItemEventArgs) If e.Item.ItemType = Repeater1.AlternatingItem OrElse e.Item.ItemType = Repeater1.Item Then Dim btn = TryCast(e.Item.FindControl("btnSave"), Button) If btn IsNot Nothing Then '' adding button event btn.Click += New EventHandler(btn_Click) End If End If End Sub Private Sub btn_Click(sender As Object, e As EventArgs) ''write your code End Sub


Editar:

Después de algunas investigaciones aquí en SO, descubrí que otros eventos que ItemCommand no son detectados por Asp:Repeater , como dijo FlySwat en su respuesta. Por lo tanto, tendrá que escribir su código VB.NET así:

Primero, declare el evento ItemCommand en su página con algo como esto:

Protected Sub rpt_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.RepeaterCommandEventArgs) Handles rpt.ItemCommand If e.CommandName = "Save" Then ''Save End If End Sub

Luego, en Asp:Button dentro de Asp:Repeater , debe establecer su propiedad CommandName esta manera:

<Asp:Button ID="btnSave" runat="server" CommandName="Save" UseSubmitBehavior="false"/>

Eche un vistazo aquí para obtener más información acerca de UseSubmitBehavior .

Intentalo.