From last post: DNN DotNetNuke Viewstate Optimization, I have show you how to save the viewstate in disk by modifying the DotNetNuke framework. But there is a disadvantage, if you upgrade your DotNetNuke to a new version, you have to modify the files again. That is not the right solution, I have googled a lot and check the dotnetnuke's source file. And I found this:
Protected Overrides ReadOnly Property PageStatePersister() As System.Web.UI.PageStatePersister
Get
'Set ViewState Persister to default (as defined in Base Class)
Dim _persister As PageStatePersister = MyBase.PageStatePersister
If Not DotNetNuke.Common.Globals.HostSettings("PageStatePersister") Is Nothing Then
Select Case DirectCast(DotNetNuke.Common.Globals.HostSettings("PageStatePersister"), String)
Case "M"
_persister = New CachePageStatePersister(Me)
Case "D"
_persister = New DiskPageStatePersister(Me)
Case "S"
_persister = New SessionPageStatePersister(Me)
End Select
End If
Return _persister
End Get
End Property
In the Select, DNN only handle "M", "D", "S", so that means, If we choose store viewstate in Page, DNN will use the default PageStatePersister, which can be modified by using PageAdapter.
Below is the PageAdapter:
public class HCPageAdapter : PageAdapter
{
public override PageStatePersister GetStatePersister()
{
return new XmlPageStatePersister(base.Page);
}
}
And we need create a .Browser file in App_Browser folder:
<browsers>
<browser refID="Default">
<controlAdapters>
<adapter controlType="DotNetNuke.Framework.PageBase"
adapterType="HC.DNN.Services.ViewState.HCPageAdapter" />
</controlAdapters>
</browser>
</browsers>
You can download the source file here:
How to deploy this:
1. Upload .Browser file to App_Browser folder
2. Upload .dll file to Bin folder
3. In DNN host setting: set viewstate to "Page". Done.