استفاده از webpart آزادی زیادی برای چیدن صفحه ها به کاربران می دهد . برای هر صفحه می توان آیتم های متفاوتی استفاده کرد به طوری که هیچ کدام از صفحه های یک سایت شبیه یکدیگر نباشد . حتی هر کاربر هم می تواند متناسب با نیاز خود صفحه ها را تغییر دهد . نمونه خوب این مدل سایت ها  iGoogle ، PageFlakes و Dropthings.com هستند .  سازنده Dropthings یک کتاب هم دارد که روش ایجاد آنچنان سایتی را در آن توضیح داده است .
در سایتهایی که فقط مدیر آنها می خواهد صفحه ها را بچیند نیازی به این همه آزادی عمل نیست . کاربران لزومی ندارد بتوانند همه اجزای صفحه ها را برابر سلیقه خود تغییر دهند . حتی بعضی سایتها مثل همین جا ، اصلا ً نیازی نیست هر صفحه برای خود webpart های جداگانه ای داشته باشد ، فقط کپی از یک صفحه برای تمامی صفحه ها کافی است .
راهی که من برای کپی webpart ها برای همه صفحه ها استفاده کردم نشان دادن webpart های یک صفحه در همه جا با استفاده از تغییر در Provider مربوطه بود . یک صفحه را نیز برای ویرایش و افزودن webpart ها ایجاد کردم که بعد از login کردن فعال می شود .
کد کلاسی که کار Provider جدید را انجام می دهد را در زیر می بینید :

Public Class CustomWebpartPersonalization

Inherits SqlPersonalizationProvider

Private PersianPath As String = "~/fa/default.aspx"

Private EnglishPAth As String = "~/en/default.aspx"

Protected Overrides Sub LoadPersonalizationBlobs(ByVal webPartManager As System.Web.UI.WebControls.WebParts.WebPartManager, ByVal path As String, ByVal userName As String, ByRef sharedDataBlob() As Byte, ByRef userDataBlob() As Byte)

   If InStr(path.ToLower, "/fa/") > 0 Then

      MyBase.LoadPersonalizationBlobs(webPartManager, PersianPath, userName, sharedDataBlob, userDataBlob)

   Else

      MyBase.LoadPersonalizationBlobs(webPartManager, EnglishPAth, userName, sharedDataBlob, userDataBlob)

   End If

End Sub

Protected Overrides Sub SavePersonalizationBlob(ByVal webPartManager As System.Web.UI.WebControls.WebParts.WebPartManager, ByVal path As String, ByVal userName As String, ByVal dataBlob() As Byte)

   If InStr(path.ToLower, "/fa/") > 0 Then

      MyBase.SavePersonalizationBlob(webPartManager, PersianPath, userName, dataBlob)

   Else

      MyBase.SavePersonalizationBlob(webPartManager, EnglishPAth, userName, dataBlob)

   End If

End Sub

Protected Overrides Sub ResetPersonalizationBlob(ByVal webPartManager As System.Web.UI.WebControls.WebParts.WebPartManager, ByVal path As String, ByVal userName As String)

   If InStr(path.ToLower, "/fa/") > 0 Then

      MyBase.ResetPersonalizationBlob(webPartManager, PersianPath, userName)

   Else

      MyBase.ResetPersonalizationBlob(webPartManager, EnglishPAth, userName)

   End If

End Sub

End Class

 

در web.config هم این تغییر لازم است :

 

<webParts>

<personalization defaultProvider="AspNetSqlPersonalizationProvider2">

<providers>

<add connectionStringName="MyConnectionString" name="AspNetSqlPersonalizationProvider2" type="ProjectName.CustomWebpartPersonalization"/>

</providers>

</webParts>

بدون نظر
نام :   
ايميل :      اين سايت از سيستم گراواتر استفاده می کند ، اگر در گراواتر دارای کد کاربری هستيد می توانيد از آن آدرس ايميل استفاده کنيد.  
وب سايت :   
ديدگاه :   
عدد زير را وارد کنيد :
  


  پيام شما بعد از بازبينی افزوده خواهد شد.