Как запустить событие кнопки внутри ретранслятора?
Я провел свое исследование, но не могу найти эффективный способ сделать следующее в 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