【问题标题】:best way to display search results on the same page as the search control in ASP.Net在与 ASP.Net 中的搜索控件相同的页面上显示搜索结果的最佳方式
【发布时间】:2010-10-24 18:32:49
【问题描述】:

我在一个页面上有两个控件,一个是搜索条目和提交控件,另一个是搜索结果控件,由于站点的布局,它们必须分开。我正在研究让搜索控件提交在结果控件中显示搜索结果的不同方式,最初我不关心回发,我更关心两件事

1) 我如何将选定的搜索词传递回同一页面(或者实际上传递给显示结果的控件)查询字符串、隐藏字段、会话、视图状态(有效隐藏字段)?

2)我实际上如何使页面提交给自己。

抱歉,如果这有点基本但我不是 ASP.Net 专家

【问题讨论】:

    标签: c# .net asp.net controls postback


    【解决方案1】:

    这些是用户控件,对吗?我认为在 UserControls 之间进行通信的最佳方式是使用事件。创建您自己的 EventArgs 类来封装搜索条件。提交控件在提交搜索时引发事件,包含页面处理该事件并调用搜索结果控件上的方法来执行搜索并显示结果。

    或者,结果控件可能只负责显示对象集合,而搜索控件将实际执行搜索并在 EventArgs 中返回集合。

    这是一个来自用户控件的主从细节集的示例。选择项目时,ProjectList UserControl 会引发事件:

    public event EventHandler<ProjectSelectedEventArgs> ProjectSelected;
    
        protected void uxProjectList_OnSelectedIndexChanged(object sender, EventArgs e)
        {
            if (ProjectSelected != null)
            {
                var keys = uxProjectList.DataKeys[uxProjectList.SelectedIndex].Values;
                var projectId = (Guid)keys[0];
    
                var args = new ProjectSelectedEventArgs(projectId);
                ProjectSelected(this, args);
            }
        }
    

    容器页面处理事件并调用 ProjectDetail UserControl 上的方法来显示项目的详细信息。

        protected void uxHeroProjectList_ProjectSelected(object sender, ProjectSelectedEventArgs e)
        {
    
            uxProjectDetails.Visible = true;
            uxProjectDetails.DisplayDetails(e.ProjectId);
        }
    

    【讨论】:

      【解决方案2】:

      有很多很多方法可以满足您的要求,老实说,我不确定是否有正确的答案。这完全取决于您的开发风格和您要解决的问题。

      我在编写搜索界面方面有相当多的经验,我认为使用查询字符串是传递搜索条件的好方法。然而,这有它的优点和缺点。

      优点:

      • 只需传递查询字符串,您就可以从站点或外部站点的任何位置访问搜索结果页面。

      • 可以轻松抓取您的搜索结果,因为它们只是您网站上的页面。

      • 查询字符串使用起来相当简单。

      • 用户可以在查询字符串中看到他们正在搜索的内容。 (但是这可能是一件坏事,这取决于它的用途。)

      • 用户可以为自己的搜索结果添加书签(感谢 Fredrik Mörk)

      缺点:

      • 您可能需要花时间使您的搜索条件看起来更漂亮。 IE。您是否希望您的用户只看到一个对他们来说毫无意义的 id?

      • 您可能在对搜索条件进行 html 编码时遇到问题,因为它们需要作为查询字符串参数传递。编码可以轻松完成,但如果您将保留字符用于其他用途,可能会让您头疼。

      • 您的用户可以看到他们正在搜索的内容。 (就像我说的那样,这可能是好事也可能是坏事。)

      • 您的查询字符串可能会变得太长。

      可能还有一些其他的事情我没有想到,但给了你一个想法。

      至于将页面重新发布回自身,有几种方法可以做到这一点,但请尝试使用带有 # 符号作为 href 属性的提交按钮或锚标记。

      要考虑的另一件事可能是使用 url 重写器将丑陋的查询字符串变成好看的 URL。

      例如:

      used_car_search.aspx?make=ford&model=focus

      可能变成:

      used_ford_focus.html

      编码愉快:)

      【讨论】:

      • 我会在优点方面再添加一件事;在我看来,最重要的是:搜索结果变得可收藏。这是(在我看来)良好搜索界面的一个非常重要的特征。
      • 谢谢,我已经避免使用查询字符串,但从我的角度来看,优点胜过缺点
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-25
      • 1970-01-01
      • 2016-04-07
      • 1970-01-01
      • 2013-03-17
      • 1970-01-01
      • 2018-03-26
      相关资源
      最近更新 更多