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.