将25个搜索字段传递到aspx页面的更好方法

本文关键字:更好 方法 aspx 搜索 25个 字段 | 更新日期: 2023-09-27 18:29:48

我有一个包含25个字段的查找屏幕。当用户单击搜索按钮时,该信息应传递到服务器,并且用户应重定向到SearchResultList页面。将用户选择的值(从查找屏幕)输入SearchResultList屏幕的最佳方式是什么?

我能想到两种方法:

  1. 将字段添加到会话
  2. 将所选值作为查询字符串传递

有没有更好的方法?

注意:将来,查找屏幕可能会转换为弹出div;但它仍将重定向到另一个页面以获取结果。

环境::

Visual Studio 2010

ASP.Net Web表单

C#

将25个搜索字段传递到aspx页面的更好方法

您可以将表单发布到下一页,然后通过搜索页面上的Request.form["]获取值吗?

您是否尝试过使用jQuery序列化表单?

SO.

上还有一堆关于这一点的其他帖子

我建议使用一个会话和一个会话对象。类似这样的东西:

// When retrieving an object from session state, cast it to 
// the appropriate type.
ArrayList filterOptions = (ArrayList)Session["FilterOptions"];
// Write the modified list back to session state.
Session["FilterOptions"] = filterOptions ;

还有第三个更好的选项,那就是使用POST而不是GET(当您将参数放入querystring时会这样做)。

如果您使用这样的表单,ASPX会自动使用POST:

<form id="form1" runat="server">
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    ...
</form>

这更好,因为数据在回发时使用HTTPPOST方法传递到页面,该方法不在查询字符串中显示参数。

然而,如果您希望用户能够在不编程的情况下为搜索添加书签/收藏夹,那么使用GET(querystring)方法是最好的。

使用会话状态来存储搜索参数很难测试、调试,而且通常是一种糟糕的做法。

对于搜索,我通常更喜欢使用带有查询字符串的GET。非常简单,对用户透明。唯一需要注意的是,如果您有25个字段,您可能会遇到Url限制。

看看Stackoverflow或谷歌的搜索方式。仅在非默认值的查询字符串中显示参数。例如,如果用户只填写25个值中的1个,那么您应该只传递一个参数。例如:/search?q=术语

对更新/保存数据的基于事务的方法使用POST。(或者如果您的Url包含查询字符串太长。)

避免使用会话,因为它往往有边缘条件,允许错误悄悄进入。你必须担心会话超时、CDN缓存、用户在服务器之间切换等。为什么不需要的时候会让你的生活变得复杂。