从主页面上的文本框中检索搜索字符串以进行内部搜索

时间:2012-12-20 01:34:51

标签: c# asp.net

目前,我的母版页上有一个文本框和一个按钮,用于输入和提交搜索字符串。搜索是我网站的内部搜索。用户将输入搜索字符串,然后单击搜索按钮。搜索按钮重定向到搜索结果页面。加载搜索结果页面后,它会搜索上一页的控件以查找搜索字符串文本框以检索搜索字符串。

除非由于例外而从登录页面输入搜索,否则一切正常:当前用户不允许访问上一页

所以我想知道什么是检索搜索字符串的更好方法。我宁愿不用它弄乱重定向网址。我并不反对将它存储在Session集合中,但是在页面加载事件发生之前我很难弄清楚如何将它存储在那里。

以下是密码:

从母版页:

<asp:TextBox ID="SearchTextBox" runat="server" />
<asp:ImageButton ID="SearchButton" runat="server" Text="Search" PostBackUrl="~/Search.aspx" ImageUrl="~/Graphics/btn_search.png" ImageAlign="AbsMiddle" />

从搜索结果页面:

private string getSearchTextBoxText(Control ctrl)
{
    if (ctrl.HasControls())
    {
        foreach (Control child in ctrl.Controls)
        {
            string s = getSearchTextBoxText(child);

            if (s != null)
                return s;
        }
    }
    else if (ctrl.ID == "SearchTextBox")
    {
        return ((TextBox)ctrl).Text;
    }

    return null;
}

protected void Page_Load(object sender, EventArgs e)
{
    log.Debug("Entering " + MethodBase.GetCurrentMethod().Name);
    string lastSearchText = Label1.Text;
    string searchText = null;

    try
    {
        searchText = PreviousPage != null ? getSearchTextBoxText(PreviousPage) : getSearchTextBoxText(this);
    }
    catch(Exception ex)
    {
        log.Error("Exception occurred attempting to retrieve the search string", ex);
    }
...

2 个答案:

答案 0 :(得分:0)

我没有正确地回答您的问题,但是从标题我可以假设您希望子页面中母版页的文本框中的文本。对?为此,试试这段代码:

TextBox SearchTextBox= (TextBox)this.Master.FindControl("SearchTextBox");
string searchText = SearchTextBox.Text;

由于

答案 1 :(得分:0)

我能够通过将以下内容添加到Account目录中的Web.config文件来解决此问题:

<location path="Login.aspx">
    <system.web>
        <authorization>
            <allow users="*"/>
        </authorization>
    </system.web>
</location>

一旦添加,就可以访问上一页,并可以检索搜索字符串。