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

C# 将25个搜索字段传递到aspx页面的更好方法,c#,jquery,asp.net,.net,webforms,C#,Jquery,Asp.net,.net,Webforms,我有一个25个字段的查找屏幕。当用户单击“搜索”按钮时,此信息应传递给服务器,并且用户应重定向到SearchResultList页面。将用户选择的值(从查找屏幕)获取到SearchResultList屏幕的最佳方法是什么 我可以想出两种方法: 将字段添加到会话 将所选值作为查询字符串传递 有没有其他更好的方法 注意:将来,查找屏幕可能会转换为弹出div;但它仍将重定向到另一个页面以获取结果 环境:: VisualStudio2010 Net网页表单 你试过使用jQuery吗 关于这一点,还有很多

我有一个25个字段的查找屏幕。当用户单击“搜索”按钮时,此信息应传递给服务器,并且用户应重定向到SearchResultList页面。将用户选择的值(从查找屏幕)获取到SearchResultList屏幕的最佳方法是什么

我可以想出两种方法:

  • 将字段添加到会话
  • 将所选值作为查询字符串传递
  • 有没有其他更好的方法

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

    环境::

    VisualStudio2010

    Net网页表单

    你试过使用jQuery吗


    关于这一点,还有很多其他帖子。

    能否将表单发布到下一页,然后通过请求获取值。在搜索页上的表单[“”]?

    我建议使用一个会话和一个会话对象。大概是这样的:

    // 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>
    
    
    ...
    
    这更好,因为数据是使用HTTP POST方法在回发时传递到页面的,该方法不显示querystring中的参数

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

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

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

    看看Stackoverflow或Google的搜索方式。仅在查询字符串中显示非默认值的参数。例如,如果用户只需填写25个值中的1个,则应只传递该参数。例如:

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


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

    你的意思与发布表单不同?+1我就是这么做的。我还经常编写一个具有静态属性的静态类,并将get/set方法读/写到会话中。这样,您就不需要难看的强制转换,并且会话变量名有一个中心位置。