ОБНОВЛЕНИЕ 1: я изучаю эту ссылку. Сохранение динамически созданных элементов управления во время PostBack — VB.net Это может объяснить то, что мне нужно знать. В комментарии по ссылке выше упоминается воссоздание элемента управления с использованием того же идентификатора. ASP.net автоматически сохранит это значение. Затем я смогу найти элемент управления и получить введенное значение. .. Благодарность ..
ОБНОВЛЕНИЕ 2: благодаря комментарию Win ниже и ссылке выше, я думаю, что понял это. Подтвердить и опубликовать ответ позже.
Я должен извиниться, кажется, что есть тысяча подобных вопросов. Но после прочтения многих вопросов и ответов я все еще не могу заставить свою простую страницу работать. Я очень новичок в этом. Пожалуйста, позвольте мне задать этот вопрос еще раз.
У меня есть очень простая страница ASPX с одним раскрывающимся списком, таблицей и одной кнопкой. Выпадающий список заполняется с использованием таблицы данных (таблица данных из таблицы SQL). таблица используется для контейнера динамически создаваемого текстового поля. и кнопка для обновления. ниже мой фрагмент кода для кода ASPX и vb.net позади
Проблема, с которой я столкнулся, заключается в том, что page.findcontrol не может найти элемент управления, который был создан динамически. Я смутно понимаю, что это проблема из-за обратной отправки, page_load vs page_init. но у меня все еще нет полного понимания после всех руководств, которые я прочитал :( .. не могли бы вы помочь, как заставить это работать?
Спасибо огромное
Дополнительная информация: я все равно пытался сделать то, что предлагается в комментарии, и я воссоздаю элемент управления при загрузке или инициализации страницы, но какое значение будет в текстовом поле при его повторном создании? вот поток, который видит пользователь.
- step0 При первой загрузке страницы еще нет динамического текстового поля
- Step1 пользователь выбирает значение 34
- step2 autopostback selectedindexchanged запущен, и значение 34 передано обратно на сервер и возвращено 2 имени joe и jack, создается динамическое textbox_1 с joe и динамическое textbox_2 с jack.
- Step3 пользователь ввел значение jane в textbox_1. и нажмите кнопку 1.
- Событие нажатия кнопки Step4 button1 запущено, и я пытаюсь захватить слово jane в textbox_1, но не могу. потому что я не могу найти элемент управления textbox_1 из-за времени или моих ограниченных знаний. вот где мне нужна помощь.
ASPX
<body>
<form id="form1" runat="server">
<div>
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True">
</asp:DropDownList>
<br />
<br />
<asp:Table ID="Table1" runat="server">
</asp:Table>
<br />
<asp:Button ID="Button1" runat="server" Text="Button" />
</div>
</form>
</body>
ВБ.нет
Imports System.Data.SqlClient
Public Class DynamicControl
Inherits System.Web.UI.Page
Dim connString As String = "Server=Local;Database=SampleData;Trusted_Connection=True;Max Pool Size=1000"
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
getData()
End If
End Sub
Private Sub getData()
Dim dt As New DataTable
Dim SQLString As String
Dim conn As New SqlConnection
conn.ConnectionString = connString
conn.Open()
SQLString = "select DepartmentID from Employee where departmentid is not null group by departmentid"
getDataBySQLConn(SQLString, dt, conn)
DropDownList1.DataSource = dt
DropDownList1.DataValueField = "DepartmentID"
DropDownList1.DataTextField = "DepartmentID"
DropDownList1.DataBind()
End Sub
Protected Sub DropDownList1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DropDownList1.SelectedIndexChanged
Dim dt As New DataTable
Dim SQLString As String
Dim conn As New SqlConnection
conn.ConnectionString = connString
conn.Open()
SQLString = "select employeeid,lastname from Employee where departmentid =" & DropDownList1.SelectedValue.ToString
getDataBySQLConn(SQLString, dt, conn)
For Each rows As DataRow In dt.Rows
Dim tTextBox As New TextBox
Dim tr As New TableRow
Dim tc As New TableCell
tTextBox.ID = "txtEmployee_" & rows("EmployeeID")
tTextBox.Text = rows("lastname")
tr.Cells.Add(tc)
tc.Controls.Add(tTextBox)
Table1.Rows.Add(tr)
Next
End Sub
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'Update Employee set lastname = '' where employeeID = 2
Dim iEmployeeID As Integer
Dim sLastName As String
Dim tTextBox As TextBox
iEmployeeID = DirectCast(Page.FindControl("txtEmployee_1"), TextBox).ToString
tTextBox = Page.FindControl("txtEmployee_1")
sLastName = tTextBox.Text
End Sub
End Class
Примечание. Событие нажатия кнопки 1 не завершено. но как только я смогу понять, как фиксировать данные, вводимые в текстовое поле, я смогу сделать все остальное. Моя основная проблема заключается в том, что я не могу получить значение txtEmployee_1 и не могу найти элементы управления. Кажется, я использовал findcontrol в неподходящее время или инициализировал элемент управления в неподходящее время.
А это мой стол
╔════════════╦══════════════╦════════════╗
║ LastName ║ DepartmentID ║ EmployeeID ║
╠════════════╬══════════════╬════════════╣
║ Rafferty ║ 31 ║ 1 ║
║ Jones ║ 33 ║ 2 ║
║ Heisenberg ║ 33 ║ 3 ║
║ Robinson ║ 34 ║ 4 ║
║ Smith ║ 34 ║ 5 ║
╚════════════╩══════════════╩════════════╝