我需要获取ViewState的base64编码表示。显然,直到请求生命周期的后期才会出现这种情况,这是可以的。
例如,如果页面的输出包括:
<input type="hidden" name="__VIEWSTATE"
id="__VIEWSTATE" value="/wEPDwUJODU0Njc5MD...==" />
我需要在服务器端使用一种方法来获取值"/wEPDwUJODU0Njc5MD...=="
为了澄清,我在呈现页面时需要此值,而不是在PostBack上。例如我需要知道发送到客户端的ViewState值,而不是我从他们那里得到的ViewState。
答案 0 :(得分:11)
Rex,我怀疑一个好的地方开始寻找压缩ViewState 的解决方案 - 他们在服务器上抓取ViewState,然后将其发送到客户端并对其进行压缩。这正是你想要的地方。
答案 1 :(得分:4)
请参阅此blog post,其中作者描述了一种覆盖生成ViewState的默认行为的方法,而是显示如何将其保存在服务器Session对象上。
在ASP.NET 2.0中,ViewState由...保存 PageStatePersister的后代 类。这个类是一个抽象类 用于保存和加载ViewsState和 有两个实现的后代 这个类在.Net Framework中命名 HiddenFieldPageStatePersister和 SessionPageStatePersister。默认情况下 使用HiddenFieldPageStatePersister 保存/加载ViewState信息, 但我们很容易得到 SessionPageStatePersister工作和 在Session对象中保存ViewState。
虽然我没有测试他的代码,但它似乎正好显示了你想要的东西:一种在回发之前仍在服务器上访问ViewState代码的方法。
答案 2 :(得分:2)
我启用了与上面发布的类似文章的压缩。在应用程序发送ViewState之前访问ViewState的关键是覆盖此方法;
protected override void SavePageStateToPersistenceMedium(object viewState)
您可以在此覆盖中调用基本方法,然后添加处理ViewState所需的任何其他逻辑。