Я задавал подобный вопрос раньше, но у меня не было четкого представления о том, с чем я столкнулся. Моя проблема в том, что я не могу получить данные из TextBox, находящегося на главном сервере, когда страница меняется. Вот что происходит:
- MasterPage с TextBox и кнопкой.
- Данные вводятся в TextBox и нажимается кнопка.
- Действие формы установлено на 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
, но это не сработало вообще, поскольку элемент управления textbox находится на главной странице.
Надеюсь, я выложил справочную информацию достаточно хорошо, дайте мне знать, если потребуются дополнительные разъяснения.
РЕДАКТИРОВАТЬ : Использование 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