如何在母版页ASP.NET上实现搜索栏

wiz*_*loc 0 c# asp.net

我正在尝试为我的ASP.NET页面创建一个搜索栏,它将包含在主页中,以便它将显示在所有页面上.输入搜索文本并点击搜索将发送到results.aspx,然后从主页面搜索框中检索文本的值,并在网格视图中显示数据库中的数据.从我的主页搜索工作正常,但我希望用户能够在结果页面上输入新的搜索文本,并在网格视图中使用新数据重新加载页面.这是results.aspx页面加载的代码

   if (PreviousPage != null)
            {
                TextBox SourceTextBox =
                    (TextBox)PreviousPage.Master.FindControl("txtSearchMaster");
                if (SourceTextBox != null)
                {
                    txtSearch.Text = SourceTextBox.Text;
                }
            }
Run Code Online (Sandbox Code Playgroud)

母版页上的代码

    <div id="search">
         <asp:HyperLink ID="linkAddFile" runat="server" BorderStyle="None" NavigateUrl="~/Default.aspx" Width="150px" >Add File</asp:HyperLink>
         <asp:TextBox ID="txtSearchMaster" runat="server"></asp:TextBox>
         <asp:Button ID="btnSearch" runat="server" Text="Search" PostBackUrl="~/results.aspx" />
     </div>
Run Code Online (Sandbox Code Playgroud)

问题是,一旦我到达结果页面并尝试从那里进行新搜索,我的条件(PreviousPage!= null)表示它空.

mas*_*son 7

不要通过PreviousPage属性从上一页获取搜索值.

相反,当用户执行搜索时,从搜索文本框中获取值并将值传递给结果页面.例:

母版页

<div id="search">         
         <asp:TextBox ID="txtSearchMaster" runat="server"></asp:TextBox>
         <asp:Button ID="btnSearch" runat="server" Text="Search" OnClick="btnSearch_Click" />
     </div>
Run Code Online (Sandbox Code Playgroud)

主码背后

protected void btnSearch_Click(object sender, EventArgs e)
{
    var searchText = Server.UrlEncode(txtSearchMaster.Text); // URL encode in case of special characters
    Response.Redirect("~/Results.aspx?srch="+searchText);
}
Run Code Online (Sandbox Code Playgroud)

结果页面代码落后

protected void Page_Load(object sender, EventArgs e)
{
    if(!String.IsNullOrEmpty(Request.QueryString["srch"])
    {
        //perform search and display results
    }
}
Run Code Online (Sandbox Code Playgroud)