Как запустить событие кнопки внутри ретранслятора?

Я провел свое исследование, но не могу найти эффективный способ сделать следующее в VB:

  • Каждая кнопка должна запускать одно и то же событие.
  • Событие кнопки сохраняет каждый элемент повторителя, поэтому каждое событие не уникально.

Я знаю, что могу использовать параметр ItemCommand, но не смог заставить его работать так, как хотелось бы.

ASP.NET

Внутренний ретранслятор

<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

2 ответа

Решение

Редактировать:

После некоторых исследований здесь, я обнаружил, что другие события, чем ItemCommand не пойманы Asp:Repeater FlySwat сказал 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

Затем на Asp:Button разметка внутри Asp:Repeater, вы должны установить его CommandName свойство как это:

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

Посмотрите здесь, чтобы узнать больше о UseSubmitBehavior,

Попытайся.

Когда кнопка находится внутри шаблона Repeater, вам нужно добавить событие OnClick, вы можете добавить событие на ItemDataBound event контроля повторителя.

Ваш.aspx-код будет выглядеть примерно так:

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

фоновый код

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 
}

в 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
Другие вопросы по тегам