如何获得建立,编码ViewState的价值?

vfugit 发布于 2018-02-05 asp.net 最后更新 2018-02-05 01:13 789 浏览

我需要获取ViewState的base64编码表示。很明显,这只能在请求生命周期的相当晚的时候才可用,这是可以的。 例如,如果页面的输出包括:

<input type="hidden" name="__VIEWSTATE" 
  id="__VIEWSTATE" value="/wEPDwUJODU0Njc5MD...==" />
我需要在服务器端获取值"/wEPDwUJODU0Njc5MD...=="的方法 为了澄清,我需要这个值,当页面正在呈现,而不是回发。例如我需要知道发送的ViewState值到客户端,而不是ViewState。
已邀请:

guozao

赞同来自:

雷克斯,我怀疑是一个很好的开始寻找的解决方案是压缩ViewState - 他们抓取服务器上的ViewState,然后将其发送到客户端并进行压缩。这正是你想要的地方。

icum

赞同来自:

请参阅blog post,其中作者描述了一个方法,用于覆盖生成ViewState的默认行为,而是显示如何将其保存在服务器的Session对象上。

In ASP.NET 2.0, ViewState is saved by a descendant of PageStatePersister class. This class is an abstract class for saving and loading ViewsState and there are two implemented descendants of this class in .Net Framework, named HiddenFieldPageStatePersister and SessionPageStatePersister. By default HiddenFieldPageStatePersister is used to save/load ViewState information, but we can easily get the SessionPageStatePersister to work and save ViewState in Session object.
虽然我没有测试他的代码,但它似乎正好显示出你想要的东西:在回发之前,仍然可以在服务器上访问ViewState代码的方法。

sut

赞同来自:

我启用了类似的文章,以上张贴的压缩。在应用程序发送之前访问ViewState的关键是重写此方法;

protected override void SavePageStateToPersistenceMedium(object viewState)
你可以调用这个覆盖中的基本方法,然后添加任何额外的逻辑你需要处理的ViewState。