将25个搜索字段传递到aspx页面的更好方法
本文关键字:更好 方法 aspx 搜索 25个 字段 | 更新日期: 2023-09-27 18:29:48
我有一个包含25个字段的查找屏幕。当用户单击搜索按钮时,该信息应传递到服务器,并且用户应重定向到SearchResultList页面。将用户选择的值(从查找屏幕)输入SearchResultList屏幕的最佳方式是什么?
我能想到两种方法:
- 将字段添加到会话
- 将所选值作为查询字符串传递
有没有更好的方法?
注意:将来,查找屏幕可能会转换为弹出div;但它仍将重定向到另一个页面以获取结果。
环境::
Visual Studio 2010
ASP.Net Web表单
C#
您可以将表单发布到下一页,然后通过搜索页面上的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缓存、用户在服务器之间切换等。为什么不需要的时候会让你的生活变得复杂。