c# -如何获取已构建的已编码ViewState的值?

Translate

我需要获取ViewState的base64编码表示形式。显然,直到请求生命周期中的相当晚才可以使用,这是可以的。

例如,如果页面的输出包括:

<input type="hidden" name="__VIEWSTATE" 
  id="__VIEWSTATE" value="/wEPDwUJODU0Njc5MD...==" />

我需要一种在服务器端获取价值的方法"/wEPDwUJODU0Njc5MD...=="

为了澄清,我需要在呈现页面时使用此值,而不是在PostBack上。例如,我需要知道的ViewState值已发送客户端,而不是我从他们那里回来的ViewState。

This question and all comments follow the "Attribution Required."

所有的回答

Translate

雷克斯,我怀疑一个开始寻找解决方案的好地方压缩ViewState-在将ViewState发送到客户端之前,他们先在服务器上获取ViewState并将其压缩。那就是您想要的位置。

来源
Translate

看到这个博客文章作者在其中描述了一种方法,该方法可替代用于生成ViewState的默认行为,而是显示如何将其保存在服务器的Session对象上。

在ASP.NET 2.0中,ViewState由PageStatePersister类的后代保存。此类是用于保存和加载ViewsState的抽象类,在.Net Framework中该类有两个实现的后代,分别称为HiddenFieldPageStatePersister和SessionPageStatePersister。默认情况下,HiddenFieldPageStatePersister用于保存/加载ViewState信息,但是我们可以轻松地使SessionPageStatePersister正常工作并将ViewState保存在Session对象中。

尽管我没有测试他的代码,但它似乎确实显示了您想要的内容:一种在回发之前仍在服务器上但仍可以访问ViewState代码的方法。

来源
Translate

我在与上面发布的类似文章之后启用了压缩功能。在应用程序发送ViewState之前访问它的关键是重写此方法。

protected override void SavePageStateToPersistenceMedium(object viewState)

您可以在此覆盖范围内调用基本方法,然后添加处理ViewState所需的任何其他逻辑。

来源