0

这段代码之前工作正常,基本上我有一个母版页,它有一个用于搜索的文本框,我将它命名为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>
<asp:Button ID="searchbutton" runat="server" Text="search" UseSubmitBehavior="True" PostBackUrl="~/search.aspx" CssClass="searchBtn" />
.

4

2 回答 2

1

我同意 Kyle 关于为什么它不起作用以及如果您想继续通过文本控件访问该值的解决方案,但您也可以从 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。

于 2008-10-30T23:23:57.523 回答
1

我认为因为您使用的是 PostBackUrl,所以您将需要使用“ PreviousPage ”标识符来引用您的变量。

另一种解决方案是不使用 PostBackUrl 属性并在用户控件中捕获事件(我假设您将其封装在一个位置),然后使用:

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

由于您不一定要传递敏感数据,因此这也应该是可以接受的。

于 2008-10-30T21:02:25.767 回答