我的任务是将现有的ASP.NET站点从使用InProc会话管理转换为使用ASP.NET状态服务器。
当然这意味着会话中存储的任何内容都必须是可序列化的。
应用程序中最复杂的页面之一是当前将ASP.NET控件集合存储到Session。由于控件无法自动序列化,因此失败了。
如果没有完全重写页面如何工作以防止在Session中存储控件集合,是否有人有一个技巧/解决方案来使集合可序列化?
答案 0 :(得分:7)
重写页面。你以后会感谢你自己。如果最初的“程序员”(我在这里松散地使用这个术语)认为在会话中存储控件层次结构是个好主意,肯定会有其他问题。
答案 1 :(得分:2)
不要将控件集存储在会话状态中。苔丝有很多关于此的文章,例如this one。
答案 2 :(得分:0)
首先想到的答案是进行部分重写(我不认为这会有一个简单的答案)。如果它是少量控件类型,请编写自己的控件,这些控件继承自这些控件并实现ISerializable。然后,使用搜索和替换,将页面控件替换为您的版本。如果您使用大量控件类型,则可能会花费更多时间来扩展标准类型,而不是重构页面。
当您初始化控件时,工作将在控件的序列化和反序列化中,以确保您捕获所需的内容(TextBox值,IsSelected等)。
这显然是一个黑客攻击,但如果您的优先级确实没有重写该特定页面的功能,那么这可能对您有用。然后,当然,您需要将此解决方案添加到您的应用程序产生的“技术债务”中,以确保在某些时候总是在某人的雷达上重构。