Я хочу создать количество элементов управления динамически на основе числа, которое пользователь вводит в текстовое поле. В этой части я отлично работаю, но мне также нужны динамически созданные текстовые поля для собственных обработчиков событий, поэтому пользователь может ввести число в них и создать больше элементов управления.Динамический обработчик событий не запускается
Моя проблема в том, что обработчик событий я установки для этих элементов управления использовать не срабатывает. Возможно, я не правильно понял жизненный цикл страницы ASP.NET, но в настоящее время у меня есть динамические элементы управления, созданные внутри события OnInit (до того, как я генерировал их внутри события TextChanged самого первого текстового поля, но переключился на использование OnInit событие, основанное на совете от Одеда, я нашел здесь: Dynamically Added Event Handler Not Firing).
EDIT
Я удалил код, который я первоначально отправил, потому что этот пост будет просто слишком долго иначе.
Я собираюсь отправить весь свой код .aspx и код позади здесь, так что вы, ребята, знаете, что это именно то, что я смотрю на. Опять же, динамический TextBox, который генерируется этим кодом при изменении текста внутри него, не запускает обработчик событий, привязанный к нему, и он просто исчезает. Интересно отметить, - я думаю, что постбэк на самом деле происходит при изменении текста, но это не срабатывает обработчик события ...
ASPX передний конец:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div id="dynamicControlDiv">
<asp:Label ID="lblEnter" runat="server" Text="Enter the amount of textboxes you want:"></asp:Label>
<asp:TextBox ID="txtEnter" runat="server" AutoPostBack="true"></asp:TextBox>
<asp:Label ID="lblConfirm" runat="server" Text=""></asp:Label>
</div>
</form>
</body>
</html>
КОД ЗА:
Частичный класс _Default Inherits System.Web.UI.Page
Dim numOfDesiredControls As Int16
Protected Sub txtEnter_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtEnter.TextChanged
Try
numOfDesiredControls = Convert.ToInt16(txtEnter.Text)
If Not numOfDesiredControls = 0 Then
For i As Int16 = 1 To numOfDesiredControls
Dim txtTest As New TextBox
txtTest.Text = "dynamicTextBox"
txtTest.ID = "dynamicTextBox" + i.ToString
txtTest.AutoPostBack = True
Form.Controls.Add(txtTest)
AddHandler txtTest.TextChanged, AddressOf dynamicEventHandler
Next
End If
Catch ex As Exception
End Try
End Sub
Protected Sub dynamicEventHandler(ByVal sender As Object, ByVal e As System.EventArgs)
' If the event handler gets fired, reflect this by changing the text of lblConfirm
lblConfirm.Visible = True
lblConfirm.Text = "Event handler fired!"
End Sub
End Class
Попробуйте создать свой собственный проект с помощью этого кода и посмотрите, есть ли у меня те же проблемы, что и я, - динамически созданные сообщения TextBox, но не запускает его обработчик событий, а затем TextBox исчезает со страницы ... Спасибо снова за помощь!
Этот код должен работать нормально. Вы уверены, что цикл повторяется и что вы выполняете какое-либо изменение (и проверяете его) в соответствующих текстовых окнах? – varocarbas
Да, я прошел через цикл, прошел, генерирует текстовые поля, но когда я меняю текст в любом из этих текстовых полей, их событие textChanged (которое является событием выше в моем коде) не срабатывает. Динамические текстовые поля отображаются на странице ... это просто, что их обработчики событий не срабатывают. –
Помните, что в ASP поведение отличается от Winforms. Это событие запускается только при отправке изменений на сервер (http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.textbox.textchanged.aspx), то есть, когда например, нажмите «ввод». – varocarbas