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

本文关键字:实现 搜索栏 母版页 NET ASP | 更新日期: 2023-09-27 18:00:01

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

   if (PreviousPage != null)
            {
                TextBox SourceTextBox =
                    (TextBox)PreviousPage.Master.FindControl("txtSearchMaster");
                if (SourceTextBox != null)
                {
                    txtSearch.Text = SourceTextBox.Text;
                }
            }

主页上的代码

    <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>

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

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

不要通过PreviousPage属性获取上一页的搜索值。

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

主页

<div id="search">         
         <asp:TextBox ID="txtSearchMaster" runat="server"></asp:TextBox>
         <asp:Button ID="btnSearch" runat="server" Text="Search" OnClick="btnSearch_Click" />
     </div>

背后的主代码

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);
}

后面的结果页面代码

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

我认为您不应该通过PreviousPage属性从上一页获取搜索值。

相反,你也可以这样做:

TextBox mastertxt = (TextBox)Master.FindControl("txtSearchMaster");
Response.Redirect("~/YourResultPage.aspx?search="+mastertxt.Text.ToString());