如何在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。
不要通过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());