Передача данных формы с главной страницы на другие страницы ASP.NET

Я задавал аналогичный вопрос раньше, но у меня не было четкого представления о том, в чем проблема, с которой я столкнулся. Моя проблема в том, что я не могу получить данные из TextBox, находящегося на главном сервере, при изменении страницы. Вот что происходит:

  1. MasterPage с текстовым полем и кнопкой.
  2. Данные вводятся в текстовое поле и нажимается кнопка.
  3. Действие формы установлено на search.aspx, веб-приложение перемещается туда.
  4. Эта функция получает содержимое 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

person Anders    schedule 03.11.2008    source источник


Ответы (1)


Чтобы значение было загружено на страницу внутри элемента управления, вы должны быть внутри обратной передачи, поэтому она работает при публикации со страницы поиска.

Чтобы получить значение при вводе из других областей, вам нужно будет использовать Request.Form («Элемент»), чтобы получить значение из опубликованной формы. Если вам нужно это сделать, просто убедитесь, что вы знаете идентификатор окна поиска, и все будет в порядке.

person Mitchel Sellers    schedule 03.11.2008