在与ASP.Net中的搜索控件相同的页面上显示搜索结果的最佳方法
我在页面上有两个控件,一个是搜索条目和提交控件,另一个是搜索结果控件,由于站点的布局,它们必须分开。 我正在寻找不同的方式让搜索控件提交在结果控件中显示搜索结果,最初我不打扰回发,我更加困扰两件事
1)如何将选定的搜索词传递回同一页面(或实际上传递给显示结果的控件)QUerystring,hiddenfield,session,viewstate(有效隐藏字段)?
2)我如何实际让页面提交给自己。
道歉,如果这有点基础,但我不是ASP.Net专家
做你要求的事情有很多种方式,说实话,我不确定是否有正确的答案。 这一切都取决于您的开发风格和您尝试解决的问题。
我在编写搜索界面方面有相当多的经验,在我看来,使用查询字符串是传递搜索条件的好方法。 然而,这有其优点和缺点。
优点:
-
只需传递查询字符串,即可从站点中的任何位置或外部站点访问搜索结果页面。
-
您的搜索结果可以轻松抓取,因为它们只是您网站上的网页。
-
查询字符串使用起来非常简单。
-
用户可以在查询字符串中查看他们正在搜索的内容。 (但根据其使用情况,这可能是一件坏事。)
-
用户可以预订标记他们的serach结果(感谢FredrikMörk)
缺点:
-
您可能需要花时间让搜索条件看起来很漂亮。 IE您希望您的用户只是看到一个对他们毫无意义的ID吗?
-
您可能遇到html编码搜索条件的问题,因为它们需要作为查询字符串参数传递。 编码可以轻松完成,但如果您使用保留字符进行其他操作,则可能会让您头疼。
-
您的用户可以看到他们正在搜索的内容。 (就像我说这可能是好事还是坏事。)
-
您的查询字符串可能会变得太长。
可能还有其他一些我没有想过的东西,但这会给你一个想法。
至于将页面再次发布回自身,有几种方法可以做到这一点,但尝试使用#符号作为href属性的提交按钮或锚标记。
另一件需要考虑的事情可能是使用url重写器使你的丑陋查询字符串看起来很漂亮。
例如:
used_car_search.aspx?让福特=&模型=焦点
可能成为:
used_ford_focus.html
快乐编码:)
这些是UserControls,对吗? 我认为在UserControls之间进行通信的最佳方式是使用事件。 创建自己的EventArgs类以封装搜索条件。 提交控件在提交搜索时引发事件,并且包含页面处理事件并在搜索结果控件上调用方法以执行搜索和显示结果。
或者,结果控件可能只负责显示对象集合,搜索控件实际上会执行搜索并返回EventArgs中的集合。
这是一个来自UserControls的主 – 详细信息集的示例。 ProjectList UserControl在选择项目时引发事件:
public event EventHandler 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); }