【问题标题】:Custom Personalization Provider - Implement FindState method自定义个性化提供程序 - 实现 FindState 方法
【发布时间】:2012-01-12 03:38:15
【问题描述】:

我一直在为此头疼。我很感激任何帮助。

我有一个自定义 PersonalizationProvider、自定义 WebPartManager 和自定义 WePart 类。我有用于存储每个用户的个性化数据的自定义数据表。我的任务是以编程方式遍历每个用户添加的所有 Web 部件,以便我可以设置个性化属性。

根据文档,FindState 方法返回给定 PersonalizationStateQuery 的 PersonalizationStateInfoCollection:

PersonalizationStateQuery pq = new PersonalizationStateQuery();
pq.PathToMatch = path;
pq.UsernameToMatch = userName;
int count;
CustomPersonalizationProvider provider= new CustomPersonalizationProvider();
PersonalizationStateInfoCollection pcol = provider.FindState(PersonalizationScope.User, pq, 0, Int32.MaxValue, out count);

PersonalizationProvider 是一个抽象类,我必须在我的自定义类中为 FindState 方法提供我自己的实现。我花了 6 个小时试图找到一些东西,但我不知道如何实现这个方法。

PersonalizationData 是 blob。我可以将它反序列化为对象数组。但没有进一步的。我不知道如何将该 blob 序列化/反序列化到 PersonalizationStateInfoCollection。

String BlobString = Convert.ToBase64String(UserDataBlob);
ObjectStateFormatter formatter = new ObjectStateFormatter();
Object[] DeserializedObjects = (Object[])formatter.Deserialize(BlobString);

有谁知道 WebPartManager 如何将 UserPersonalizationData 序列化为存储在数据库中的字节数组?

【问题讨论】:

    标签: web-parts personalization


    【解决方案1】:

    尝试从 SQLPersonalizationProvider 而不是 PersonalizationProvier 继承您的提供程序。这样您就不必实现 FindState、ResetState、ReserUserState 和 GetCountOfState 方法。

    几个月前,我试图解码这些字节,但当我发现我真的不必使用这个技巧来编写它时,我放弃了。

    但我认为这不是一个完美的解决方案。如果您的提供程序使用 Oracle、MySql 或除 SQL Server 之外的任何其他工具,您会发现在调用您的个性化提供程序的 Initialize 方法后,它将开始请求数据库中的 aspnet 标准存储过程。

    【讨论】:

      【解决方案2】:
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多