2008-10-30 152 views
0

此代碼以前正常工作,基本上我有一個母版頁,有一個單一的文本框進行搜索,我把它命名爲searchBox。我有一種方法可以在表單提交中提取searchBox的內容並將其設置爲變量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。然而,現在,如果searchBoxsearch.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] 

這加上其他技術(使用PreviousPage屬性)的記錄在這裏: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; 
    } 
} 

更新:感謝Jason Kealey指出我需要使用UniqueID。