在请求之间保留数据的最标准或最佳方法是什么?
我应该使用Cookie还是会话变量?我有兴趣保留排序顺序,排序列和页码(用于分页)等数据。
我来自webforms背景,所以通常这种类型的东西在我使用的控件的viewstate中自动处理。
更新
我喜欢查询字符串的想法,用于搜索和更有意义的网址;但是,我正在开发一个“索引/列表”视图,它包含一个带有标题的视图和“控制”选项,如用于过滤的DDL和用于呈现数据表的局部视图。
DDL使用$.load()
来调用控制器上的ActionResult,它返回部分视图,在查询字符串中传递参数,但由于这些是ajax请求,因此用户浏览器的主页面URL无法获取更新。
是否存在从主页网址中获取查询字符串并在其他ActionResults的ajax请求中使用查询字符串的最佳做法?
答案 0 :(得分:6)
如果你希望它只能通过一个请求/重定向生存TempData是你的朋友。
但是,对于像您的分页这样的内容,URL是最好的方法,因为它可以单独共享链接。
答案 1 :(得分:3)
标准方法是通过URL查询参数传递这些内容。您可以修改路由以期望某些URL变量。这样页面也变得更加适合搜索引擎。
答案 2 :(得分:1)
为了响应您的更新,实现 pages 的一个好方法是链接到“Previous”和“Next”页面的结果(或者更好的是,所有页面的列表在列表中),页面上的输出,带有页码,然后用JavaScript隐藏。
这样用户应该看到你的漂亮,AJAXy行为,搜索引擎(以及没有JavaScript的用户 - 移动设备,或那些使用旧版屏幕阅读器的用户)仍然可以访问您的所有网页 - 这将有助于您页面要优雅地降级,或使用“渐进增强”。
答案 3 :(得分:0)
这取决于您希望信息的永久性:
就我个人而言,我会非常仔细地考虑在网址中放置排序顺序和列,如果你真的最终会让搜索引擎感到困惑:
这些可以通过使用Robots.txt文件来减轻,该文件拒绝访问页面的排序版本,但如果这几乎是动态生成的,那么维护这一过程将非常复杂。
答案 4 :(得分:0)
以前在viewstate中的东西应该通过隐藏字段或cookie放回到客户手中。
会议“太”容易了。在开发环境中,无论你放入什么内容,它都非常有用。在生产中,可伸缩性和持久性成为一个问题。如果您的站点中存在崩溃错误,并且在负载平衡时需要服务器关联,则进程内会话可能会意外消失。进程外会话修复了持久性和亲和性问题,但如果在会话中放入太多东西,它仍然可以成为性能瓶颈。一个非常常见的问题是每个页面会将1或2个项目放入会话中,但在完成后不会再将它们取出。即使页面在不再需要时删除会话数据,如果用户启动进程并且永远不会完成它,数据仍然可能会被孤立。
答案 5 :(得分:0)
Cookie是一种在请求之间保留数据的快速而简单的方法,您也可以根据需要使其仅为limited time生效。
答案 6 :(得分:-1)
会话最简单。