Нечетная проблема с текстовым полем и ASP.NET - PullRequest
0 голосов
/ 30 октября 2008

Раньше этот код работал правильно, в основном у меня есть главная страница с одним текстовым полем для поиска, я назвал его searchBox. У меня есть метод для извлечения содержимого searchBox при отправке формы и установки его в переменную userQuery. Вот метод:

Public Function searchString(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

Результаты отображаются на search.aspx. Однако теперь, если searchBox заполнено и отправлено на странице, отличной от search.aspx, содержимое текстового поля не будет пропущено. Форма очень простая, просто:

<asp:TextBox ID="searchBox" runat="server"></asp:TextBox><br> <asp:Button ID="searchbutton" runat="server" Text="search" UseSubmitBehavior="True" PostBackUrl="~/search.aspx" CssClass="searchBtn" />.

Ответы [ 2 ]

1 голос
/ 31 октября 2008

Я согласен с Кайлом относительно того, почему это не работает, и решения, если вы хотите продолжать получать доступ к значению через текстовый элемент управления, но вы также можете извлечь данные формы из httprequest. Я думаю так (мой asp.net немного ржавый)

Request.Form[txtBoxSrc.UniqueID]

Этот плюс другие методы (с использованием свойства предыдущей страницы) описаны здесь: http://msdn.microsoft.com/en-us/library/6c3yckfw(VS.80).aspx. Кажется, все, что вам нужно сделать, это:

if (Page.PreviousPage != null)
{
    TextBox SourceTextBox = 
        (TextBox)Page.PreviousPage.FindControl("TextBox1");
    if (SourceTextBox != null)
    {
       return SourceTextBox.Text;
    }
}

Обновлено: спасибо Джейсону Кили за указание на то, что мне нужно использовать UniqueID.

1 голос
/ 31 октября 2008

Я думаю, что поскольку вы используете PostBackUrl, вам потребуется использовать идентификатор " PreviousPage " для ссылки на вашу переменную.

Другое решение - не использовать свойство PostBackUrl и захватывать событие в пользовательском элементе управления (я предполагаю, что вы инкапсулируете это в одном месте), а затем использовать:

Response.Redirect("/search.aspx?sQuery=" & Server.URLEncode(searchBox.Text)) 

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...