如何在单独的页面上显示搜索结果

本文关键字:显示 搜索结果 单独 | 更新日期: 2023-09-27 18:02:32

在我的搜索。我使用ListView来显示搜索结果:

标记:

<asp:TextBox runat="server" ID="txtSearch" placeholder="search" />
<asp:Button runat="server" ID="btnSubmit" Text="Search" OnClick="btnSubmit_Click" />
<asp:ListView ID="ListView1" runat="server">
    <ItemTemplate>
        <asp:HyperLink ID="HyperLink1" runat="server" ImageUrl='<%# String.Format("../Images/books/{0}.jpg", Eval("Id").ToString()) %>' NavigateUrl='<%#  "../books/bookdetails.aspx?BookId=" + Eval("Id").ToString() %>'></asp:HyperLink>
        <asp:Label ID="TitleLabel" runat="server" Text='<%# Eval("Title") %>' />
        <asp:Label ID="Label1" runat="server" Text='<%# Eval("Publisher") %>' />
        <asp:Label ID="Label2" runat="server" Text='<%# Eval("Author") %>' /></p>
    </ItemTemplate>
</asp:ListView>

背后的代码:

protected void btnSubmit_Click(object sender, EventArgs e)
{
    using (ELibraryEntities entities = new ELibraryEntities())
    {
        var search = from books in entities.Reviews
                    where books.Title.Contains(txtSearch.Text.Trim())
                    select books;
        ListView1.DataSource = search;
        ListView1.DataBind();
    }
}

,它工作得很好,搜索结果显示在搜索中。aspx页面。

现在,我想将搜索文本框<asp:TextBox runat="server" ID="txtSearch" placeholder="search" />移动到MasterPage,这样当用户搜索时,搜索结果就会在新的搜索中打开。aspx页面。

如何在单独的页面上显示搜索结果

微软在MSDN上有一篇关于在asp.net之间传递值的好文章,我推荐阅读。在当前的设置中,您在页面上执行一个操作,然后根据该操作运行代码,该代码从页面上的元素检索数据并执行另一个操作。为了分割搜索框和搜索结果,您需要确保操作在两个页面上都得到传达,内容(搜索查询)在两个页面上都得到传达。

作为总结,您可以采取以下几种方法:

  • 使用URL查询字符串参数*这是最常用的搜索!
  • HTTP POST数据到新页面
  • 传递服务器端参数(例如:会话状态)

我建议读入查询字符串方法。作为总结:

//1) On the source page with the search box, you would redirect the user 
//     to the search results page and append the search query to the URL: 
Response.Redirect("search.aspx?search=" + HttpUtility.UrlEncode(query));
//2) On the search results page, parse the query string values
String searchQuery = Request.QueryString["search"];
//3) Perform your search action in code and display the results.
protected void btnSubmit_Click(object sender, EventArgs e){
    //your search code
    using (ELibraryEntities entities = new ELibraryEntities())
    {
        var search = from books in entities.Reviews
                where books.Title.Contains(searchQuery)
                select books;
        ListView1.DataSource = search;
        ListView1.DataBind();
    }
}

注意Response的使用。重定向,HttpUtility。UrlEncode和Request.QueryString.

使用post-redirect-get:

  1. POST:让主页处理点击事件
  2. REDIRECT:重定向到搜索页面,包括搜索URL
  3. 中的搜索参数。
  4. GET:将搜索页面的btnSubmit_Click中的逻辑移动到其页面加载事件,考虑到通过URL传递的搜索条件,而不是直接从文本框发布。