【问题标题】:How to display search results on a separate page如何在单独的页面上显示搜索结果
【发布时间】:2014-05-09 16:44:10
【问题描述】:

在我的 search.aspx 上,我使用 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();
    }
}

它工作正常,搜索结果显示在 search.aspx 页面中。

现在,我想将搜索文本框 &lt;asp:TextBox runat="server" ID="txtSearch" placeholder="search" /&gt; 移动到 MasterPage,所以当用户搜索时,搜索结果会在新的 search.aspx 页面上打开。

【问题讨论】:

    标签: c# asp.net search


    【解决方案1】:

    Microsoft 在 MSDN 上有一篇关于 passing values between 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.RedirectHttpUtility.UrlEncodeRequest.QueryString的使用。

    【讨论】:

      【解决方案2】:

      使用后重定向获取:

      1. 发布:Have your master page handle the click event
      2. 重定向:Then redirect to the search page, including the search parameters in the search URL
      3. GET:将搜索页面的 btnSubmit_Click 中的逻辑移至其页面加载事件,考虑到通过 URL 传递而不是直接从文本框发布的搜索词。

      【讨论】:

        猜你喜欢
        • 2012-12-31
        • 1970-01-01
        • 2017-06-21
        • 1970-01-01
        • 1970-01-01
        • 2016-04-07
        • 2021-08-13
        • 2016-03-29
        • 1970-01-01
        相关资源
        最近更新 更多