gpt4 book ai didi

ASP.NET 动态命令按钮事件未触发

转载 作者:行者123 更新时间:2023-12-04 22:38:13 24 4
gpt4 key购买 nike

我正在尝试动态创建命令按钮,但单击相关按钮似乎不会引发相应的 CommandButton_Click 事件。我注意到在 SO 的示例中,为 Button.OnCommand 以及 CommandName 和 CommandArgument 设置了一个属性,但它不是智能感知中的选项。

所以问题是,我在这里做错了什么(下面没有 OnCommand 的代码),它是否以其他方式访问 - 如果是这样,为什么我发现的示例都显示为 .OnCommand?

编辑:为了进一步提供帮助,我添加了处理程序,但事件仍未触发。这些按钮位于 UpdatePanel 中,并在每次回发时重建(连同处理程序)。我已经创建了一个我正在做的简化示例,如下所示如果按钮事件触发,它会将“事件触发”写入 txtTestFired 文本框 - 可以说我从未见过。这真的让我发疯,非常感谢任何帮助。

.aspx 文件

<form id="frmMain" runat="server">
<asp:ScriptManager ID="scmAddProducts" runat="server">
</asp:ScriptManager>
<asp:updatepanel runat="server">
<ContentTemplate>
<asp:TextBox ID="txtProduct" runat="server"></asp:TextBox>
<br />
<asp:Button ID="btnAddItem" runat="server" Text="Add Line" />&nbsp;
<asp:TextBox ID="txtTestFired" runat="server"></asp:TextBox>
<br />
<br />
<asp:Panel ID="pnlAddedLines" runat="server"></asp:Panel>
</ContentTemplate>
</asp:updatepanel>
</form>

.aspx.vb 文件
Protected Sub btnAddItem_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnAddItem.Click
Dim dtItems As New System.Data.DataTable

If Session("Items") Is Nothing Then
Dim dcColumn As New System.Data.DataColumn
dcColumn.DataType = Type.GetType("System.String")
dcColumn.ColumnName = "Product"
dtItems.Columns.Add(dcColumn)
Session("Items") = dtItems
End If

dtItems = CType(Session("Items"), System.Data.DataTable)
Dim drRow As System.Data.DataRow
drRow = dtItems.NewRow()
drRow("Product") = txtProduct.Text
dtItems.Rows.Add(drRow)

Session("Items") = dtItems
txtProduct.Text = ""
End Sub
Protected Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender
If Not Session("Items") Is Nothing Then
Dim dtItems As System.Data.DataTable = CType(Session("Items"), System.Data.DataTable)
Dim iItemIndex As Integer = 1
For Each drRow In dtItems.Rows
Dim btnClose As New Button
btnClose.ID = "btnClose" & iItemIndex
btnClose.CssClass = "formCloseButton"
btnClose.Text = "X"
AddHandler btnClose.Click, AddressOf Button_Clicked
pnlAddedLines.Controls.Add(btnClose)
btnClose = Nothing

Dim txtProduct = New TextBox
txtProduct.ID = "txtProduct" & iItemIndex
txtProduct.CssClass = "formText"
txtProduct.Text = drRow("Product")
txtProduct.Columns = "40"
pnlAddedLines.Controls.Add(txtProduct)
iItemIndex += 1

Dim litHR = New Literal
litHR.Text = "<hr />"
pnlAddedLines.Controls.Add(litHR)
litHR = Nothing
Next
End If
End Sub
Private Sub Button_Clicked(ByVal sender As Object, ByVal e As System.EventArgs)
txtTestFired.Text = "EVENT FIRED"
End Sub

最佳答案

你必须像这样连接它(在 C# 中):

myButton.Click += new EventHandler(this.Button_Clicked);

或者,您可以注入(inject)属性 --> onclick = "Button_Clicked"像这样:
myButton.Attributes.Add("onclick", "Button_Clicked");

如果您想在 VB.NET 中使用它,请转到 to this page把自己打晕——我可以为你做,但有什么意义:)

编辑 :请记住,您必须在每次页面加载时重新连接事件处理程序(如上所示)。

编辑 : 好的 - 我现在看到你添加了其余代码的问题。您正在连接 pre_render 上的事件处理程序。事件处理程序在 load_complete 之前执行,这发生在 pre_render 之前。这就是你 event_handler 不执行的原因: 您在页面生命周期中添加它为时已晚 .将该代码放入 page_load 例程中,它应该可以工作。

关于ASP.NET 动态命令按钮事件未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1775788/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com