如何从转发器内部触发按钮事件?

Dre*_*TeK 2 vb.net asp.net repeater onclick itemcommand

我已经完成了我的研究但是找不到在VB中执行以下操作的有效方法:

  • 每个按钮都应该触发相同的事件.
  • 按钮事件保存每个转发器项目,因此每个事件都不是唯一的.

我知道我可以使用ItemCommand选项,但无法使其按预期工作.

ASP.NET

内置中继器项目

<asp:Button ID="btnSave" RunAt="Server"/>
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

ale*_*rdo 9

编辑:

在对SO进行了一些研究之后,我发现其他事件ItemCommand并没有被捕获Asp:Repeater,正如FlySwat在回答时说的那样.所以你需要VB.NET像这样编写你的代码:

首先,ItemCommand在页面上声明事件,如下所示:

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
Run Code Online (Sandbox Code Playgroud)

然后,在Asp:Button内部的标记上Asp:Repeater,您必须设置其CommandName属性,如下所示:

<Asp:Button ID="btnSave" runat="server" CommandName="Save" UseSubmitBehavior="false"/>
Run Code Online (Sandbox Code Playgroud)

看看这里了解更多关于UseSubmitBehavior.

试试吧.


Sai*_*eep 5

当按钮位于Repeater模板内时,需要添加OnClick事件,可以在ItemDataBound eventRepeater控件上添加事件。

您的 .aspx 代码将如下所示:

 <asp:Repeater ID="Repeater1" runat="server">
    <ItemTemplate>
        <asp:Button  ID="btnSave" runat="server" Text="SomeText" />
    </ItemTemplate>
</asp:Repeater>
Run Code Online (Sandbox Code Playgroud)

代码隐藏

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 
}
Run Code Online (Sandbox Code Playgroud)

在 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
Run Code Online (Sandbox Code Playgroud)