Я задавал аналогичный вопрос раньше, но у меня не было четкого представления о том, в чем проблема, с которой я столкнулся. Моя проблема в том, что я не могу получить данные из TextBox, находящегося на главном сервере, при изменении страницы. Вот что происходит:
- MasterPage с текстовым полем и кнопкой.
- Данные вводятся в текстовое поле и нажимается кнопка.
- Действие формы установлено на search.aspx, веб-приложение перемещается туда.
- Эта функция получает содержимое TextBox:
Public Function oSearchString(ByVal oTextBoxName As String) As String
If Master IsNot Nothing Then
Dim txtBoxSrc As New TextBox
txtBoxSrc = CType(Master.FindControl(oTextBoxName), TextBox)
If txtBoxSrc IsNot Nothing Then
Return txtBoxSrc.Text
End If
End If
Return Nothing
End Function
Когда этот код выполняется, он возвращает ""
, даже если в поле введен текст. Я попытался ввести в поле значение по умолчанию, и оно прошло нормально (т.е. <asp:TextBox ID="searchbox" runat="server" text="searchbox"></asp:TextBox>
дает "searchbox"
).
Теперь, когда я отправил форму поиска с домашней страницы, я нахожусь на странице поиска (search.aspx). Если я снова введу строку поиска, код вернет все, что я ввел в текстовое поле. Я попытался изменить приведенный выше код с Master
на PreviousPage
, но это вообще не сработало, поскольку элемент управления текстовым полем находится на главной странице.
Надеюсь, я достаточно хорошо изложил исходную информацию, дайте мне знать, если требуются дополнительные разъяснения.
РЕДАКТИРОВАТЬ: использование Request.Form("searchbox")
дает Nothing
. Я проверил объект Request.Form()
и обнаружил, что идентификатор моего текстового поля на самом деле ctl00$searchbox
. Использование этого в качестве идентификатора или его индекса (в данном случае 3) дает мне правильный результат. Было бы лучше переписать функцию, чтобы проверять все ключи в Request.Form()
на наличие ключей, содержащих searchbox
, или есть способ получить фактический идентификатор текстового поля? Для первого варианта я придумал следующее:
Public Function oSearchString(ByVal oTextBoxName As String) As String
For Each oKey As String In Request.Form.AllKeys
If oKey.Contains(oTextBoxName) Then
Return Request.Form(oKey)
End If
Next
Return ""
End Function