2008-10-30 3 views
0

Этот код работал должным образом, прежде всего, в основном у меня есть главная страница, в которой есть одно текстовое поле для поиска, я назвал его searchBox. У меня есть способ вытащить содержимое searchBox на форму submit и установить ее в переменную userQuery. Вот метод:Нечетная проблема с текстовым полем и ASP.NET

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>
<asp:Button ID="searchbutton" runat="server" Text="search" UseSubmitBehavior="True" PostBackUrl="~/search.aspx" CssClass="searchBtn" />
.

ответ

1

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

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

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

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

+0

Если вы решили сделать вышеизложенное, для любви ко всему святому, пожалуйста, убедитесь, что вы должным образом дезинфицируете эту переменную sQuery (или используя параметризованный запрос), прежде чем вставлять ее в свою базу данных. – 2008-10-30 21:09:49

+0

Согласен. Хорошая точка зрения. Наличие уровня доступа к данным, который надлежащим образом дезинфицирует параметры, имеет решающее значение. Это должно быть так, независимо от того, отправлено ли оно через QueryString. – 2008-10-30 21:13:23

1

Я согласен с Кайлом в том, почему он не работает и решение, если вы хотите продолжить доступ к значению с помощью текстового элемента управления, но вы также можете вырвать данные формы из 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.

Смежные вопросы