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

时间:2008-08-04 03:59:43

标签: c# asp.net

我需要获取ViewState的base64编码表示。显然,直到请求生命周期的后期才会出现这种情况,这是可以的。

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

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

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

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

3 个答案:

答案 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所需的任何其他逻辑。