c# – 如何在将从WebPartManager派生的类移动到新程序集时保持个
发布时间:2020-12-15 21:55:06 所属栏目:百科 来源:网络整理
导读:我们有一个多年前开始的网站项目.登录页面使用可个性化的Web部件,Web部件管理器是.NET WebPartManager类的扩展,驻留在App_Code中.奇怪的是,如果我们将这个类移动到同一个解决方案中的另一个程序集中,个性化就会被清除,我们可以节省新的个性化.但是,当我们将
我们有一个多年前开始的网站项目.登录页面使用可个性化的Web部件,Web部件管理器是.NET WebPartManager类的扩展,驻留在App_Code中.奇怪的是,如果我们将这个类移动到同一个解决方案中的另一个程序集中,个性化就会被清除,我们可以节省新的个性化.但是,当我们将课程移回时,它会再次加载原始个性化. PathId,UserId和ApplicationId似乎在asp_PersonalizationPerUser表中保持不变(有关详细信息,请参阅
http://msdn.microsoft.com/en-us/library/aa478955.aspx).
更新:我问的原因是因为我们需要将项目转换为Web应用程序项目,并且我们不希望在每天使用该应用程序的500个用户中造成任何中断.我已经把一个shelveset放在一起进行转换,除了这个问题外,一切似乎都已解决了. 更新2:我想到我需要重新提出问题. 将从WebPartManager派生的类移动到新程序集时,如何保持个性化? 解决方法
因为实现非常复杂并且是.NET框架内部的,所以创建自定义源代码来管理它是不可行的.相反,在维护期间运行数据库脚本将是最佳选择.例:
// Read the 'PageSettings' column from the ASP personalization tables // into a byte array variable called 'rawData' first. Then continue: var mems = new System.IO.MemoryStream(rawData); var formatter = new System.Web.UI.ObjectStateFormatter(); var oldState = formatter.Deserialize(mems) as object[]; var index = oldState.ToList() .FindIndex(o => o as Type != null && ((Type)o).Name.Contains("WebPartManager")); // In our case,the derivative class name is "MyWebPartManager",you // may need to change that to meet your requirements oldState[index] = typeof(WebPartManager); mems = new System.IO.MemoryStream(); formatter.Serialize(mems,oldState); var newState = mems.ToArray(); // Write 'newState' back into the database. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |