我在CMS系统C#.NET
中使用了usercontrol(* .ascx)我有一个显示地址的Gridview。您有关于订单项的链接,您可以点击项目(链接),该项目使用查询字符串信息导航到其他页面并显示详细信息。当用户点击取消/返回时,它将返回概述页面。两者都是单独的计划。
当用户点击Next,Next,Next时显示第7页。因此,点击第7页上的“地址链接”将打开一个新页面,当用户返回时,它应该再次显示第7页。
我将页码保留在会话中。所以当用户回来时,它会从会话中读取页面编号。这很好用。但问题是这个模块也用于其他门户,也用于其他门户(使用相同的模块)
所以当你点击下一个下一个等你并且你在第7页然后你打开另一个门户网站或其他具有相同模块的Porgram时,它会显示第7页。因为它读取了Session变量,因此它会提供转储,因为页面7不存在,因为没有太多记录。
Viewstate可以解决此问题,但每次点击adres项目并返回后,它都会显示第1页,这不是我想要的。
正如我所说的,我在其他页面和其他门户网站中使用相同的模块(具有不同设置CMS系统的相同程序)...所以其中和如何做我需要存储页面编号,以便它与其他页面和其他门户网站没有冲突?
ViewState [“page”] = 7 - >当你回来时总是在第1页开始
会话[“页面”] = 7 - >页码是共享的....
答案 0 :(得分:1)
为什么不在会话中保留结构或字典而不是简单的int。在这里你可以存储Page和模块。
答案 1 :(得分:0)
我相信你需要考虑实例化。您似乎需要隔离CMS的每个实例,以便每个实例共享自己的一组服务器变量,包括会话变量。
嗯,确实你正在使用一些ASCX控件,但你可以拥有一些“应用程序标识符”,因此任何控件实例都可以拥有自己的一组值。
无论如何,在会话中存储长对象是一种不好的做法,因为除了“进程中”之外的其他模式将序列化对象并在您访问会话状态时反序列化它们。
也许你需要某种自定义会话管理来优化性能和内存使用,这样你的组件就会被正确隔离,并且它们仍将保持高性能。