2009-11-06 40 views
0

我一直在爲此而頭痛。我感謝任何幫助。自定義個性化提供程序 - 實現FindState方法

我有一個自定義PersonalizationProvider,自定義WebPartManager和自定義WePart類。我有自定義數據表用於存儲每個用戶的個性化數據。我的任務是通過編程循環遍歷每個用戶添加的所有Web部件,以便我可以設置個性化屬性。

根據該文件,FindState方法返回一個PersonalizationStateInfoCollection對於給定PersonalizationStateQuery:

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。我可以將它反序列化爲對象數組。但沒有更多。我不知道如何序列化/反序列化到PersonalizationStateInfoCollection blob。

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

有誰知道WebPartManager如何將UserPersonalizationData序列化到存儲在數據庫中的字節數組中嗎?

回答

1

嘗試從SQLPersonalizationProvider而不是PersonalizationProvier繼承您的提供程序。這樣你就不必實現FindState,ResetState,ReserUserState和GetCountOfState方法。

幾個月前,我試圖解碼這些字節,但是當我發現我沒有真的必須使用這個技巧寫它時,我放棄了。

但我在想這不是一個完美的解決方案。如果您的提供者使用Oracle,MySql或除SQL Server之外的任何其他服務器,您會發現在調用個性化提供者的Initialize方法後,它將開始在數據庫中詢問aspnet標準存儲過程。

相關問題