怎么把DNN的viewstate保存在Disk File?
2009-10-03 09:35
225 查看
虽然DNN中有个DiskPageStatePersister,可是在Host Setting中不可以选择,而且我自己测试了下,有Bug,有时候文件名太长了,不能建立文件。那在不该DNN source code的前提下怎么才能把viewstate保存在服务器端呢? 让我们先研究下DNN的PageBase中的PageStatePersister属性:
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从上面的Code中我们看到,DNN只handle "M", "D", "S"这几种,如果把viewstate保存在Page中的话,就会用.Net 默认的PageStaePersister.
接下来,我们打开Reflector看看System.Web.UI.Page是怎么写的:
protected virtual PageStatePersister PageStatePersister
{
get
{
if (this._persister == null)
{
PageAdapter pageAdapter = this.PageAdapter;
if (pageAdapter != null)
{
this._persister = pageAdapter.GetStatePersister();
}
if (this._persister == null)
{
this._persister = new HiddenFieldPageStatePersister(this);
}
}
return this._persister;
}
}好了,我们可以看到,原来会先从PageAdapter中拿,如果找不到的话,才会用: HiddenFieldPageStatePersister.
这样我们就可以从PageAdapter下手了。
首先PageApater:
public class HCPageAdapter : PageAdapter
{
public override PageStatePersister GetStatePersister()
{
return new XmlPageStatePersister(base.Page);
}
}其中: XmlPageStatePersister的任务就是save, Load Viewstate From server disk.
然后的.Browser文件,告诉.Net要加载HCPageAdapter
<browsers>
<browser refID="Default">
<controlAdapters>
<adapter controlType="DotNetNuke.Framework.PageBase"
adapterType="HC.DNN.Services.ViewState.HCPageAdapter" />
</controlAdapters>
</browser>
</browsers>Ok, 现在编译,把dll放到bin folder, .Browser文件放到App_browser folder就完成了, 这样即使下载升级DNN也不影响。
你可以从这里下载本文用到的Code: DNN store Viewstate in disk revised
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从上面的Code中我们看到,DNN只handle "M", "D", "S"这几种,如果把viewstate保存在Page中的话,就会用.Net 默认的PageStaePersister.
接下来,我们打开Reflector看看System.Web.UI.Page是怎么写的:
protected virtual PageStatePersister PageStatePersister
{
get
{
if (this._persister == null)
{
PageAdapter pageAdapter = this.PageAdapter;
if (pageAdapter != null)
{
this._persister = pageAdapter.GetStatePersister();
}
if (this._persister == null)
{
this._persister = new HiddenFieldPageStatePersister(this);
}
}
return this._persister;
}
}好了,我们可以看到,原来会先从PageAdapter中拿,如果找不到的话,才会用: HiddenFieldPageStatePersister.
这样我们就可以从PageAdapter下手了。
首先PageApater:
public class HCPageAdapter : PageAdapter
{
public override PageStatePersister GetStatePersister()
{
return new XmlPageStatePersister(base.Page);
}
}其中: XmlPageStatePersister的任务就是save, Load Viewstate From server disk.
然后的.Browser文件,告诉.Net要加载HCPageAdapter
<browsers>
<browser refID="Default">
<controlAdapters>
<adapter controlType="DotNetNuke.Framework.PageBase"
adapterType="HC.DNN.Services.ViewState.HCPageAdapter" />
</controlAdapters>
</browser>
</browsers>Ok, 现在编译,把dll放到bin folder, .Browser文件放到App_browser folder就完成了, 这样即使下载升级DNN也不影响。
你可以从这里下载本文用到的Code: DNN store Viewstate in disk revised
相关文章推荐
- (论坛答疑点滴)怎么在ViewState中保存和取出自己定义的类
- 禁用viewstate怎么还保存状态?
- 禁用viewstate怎么还保存状态?
- ViewState的状态值在url参数变化时,不能保存值,怎么解决
- 利用ViewState保存Html控件状态
- ASP.NET保存信息总结(Application、Session、Cookie、ViewState和Cache等) ZT
- 使用APPlication,Session,Cookie和ViewState等对象保存信息的区别是什么?
- 在服务器端保存ViewState
- 用ViewState保存对象!
- 保存页面数据的场所——Hidden、ViewState、ControlState
- 将ViewState保存到其他地方
- 使用APPlication,Session,Cookie和ViewState等对象保存信息的区别是什么?
- ViewState与Session,以后知道怎么在page中设计变量了
- webView怎么保存设置Cookie
- webView怎么保存设置Cookie
- viewstate.static,session都可以用来保存变量或对象,页面刷新也不会自动消失
- 转载viewstate(一) 太经典的东西 不得不转载保存下来
- 状态保存机制之ViewState概述及应用
- ASP.NET保存信息总结(Application、Session、Cookie、ViewState和Cache等)
- 让人糊涂的TrackViewState()与视图状态保存