我有一个包含25个字段的查找屏幕。当用户单击搜索按钮时,应将此信息传递给服务器,并且应将用户重定向到SearchResultList页面。获取用户所选值(从查找屏幕)到SearchResultList屏幕的最佳方法是什么?
我可以想到两种方式:
是否有更好的方法?
注意:将来,查找屏幕可能会转换为弹出式div;仍然会将重定向到另一个页面以获得结果。
环境::
Visual Studio 2010
ASP.Net Web表单
C#
答案 0 :(得分:3)
您可以将表单发布到下一页然后通过搜索页面上的Request.Form [“”]获取值吗?
答案 1 :(得分:1)
您是否尝试使用jQuery serializing the form?
在SO上还有Bunch个关于此的帖子。
答案 2 :(得分:1)
我建议使用会话和一个会话对象。像这样:
// 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 ;
答案 3 :(得分:1)
有一个第三个更好的选项,那就是使用POST而不是GET(将参数放在查询字符串中时会这样做。)
如果你使用这样的表格,ASPX会自动使用POST:
<form id="form1" runat="server">
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
...
</form>
这样做更好,因为数据是使用HTTP POST方法在回发时传递给页面的,该方法不会显示查询字符串中的参数。
但是,如果您希望用户能够在不编程的情况下为搜索添加书签/收藏,那么最好使用GET(查询字符串)方法。
使用会话状态存储搜索参数很难测试,难以调试,通常是一种不好的做法。
答案 4 :(得分:1)
对于搜索,我通常更喜欢将GET与查询字符串一起使用。对用户来说非常简单和透明。唯一需要注意的是你有25个字段的情况,你可能会遇到Url limit。
了解Stackoverflow或Google的搜索方式。仅在查询字符串中显示非默认值的参数。例如,如果用户只填写25个值中的1个,则应该只传递该参数。例如:/search?q=term
将POST用于更新/保存数据的基于事务的方法。 (或者,如果您的网址对查询字符串的影响太长。)
避免使用会话,因为它往往具有允许错误进入的边缘条件。您必须担心会话超时,CDN缓存,用户在服务器之间切换等。当您不需要时,为什么会使您的生活变得复杂。