31

我需要获取base64-encoded. ViewState显然,这在请求生命周期的相当晚的时候才可用,这没关系。

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

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

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

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

4

3 回答 3

13

Rex,我怀疑一个开始寻找的好地方是压缩 ViewState的解决方案——他们在将 ViewState 发送到客户端并压缩它之前在服务器上抓取它。这正是你想成为的地方。

于 2008-08-04T08:04:41.737 回答
4

请参阅此博客文章,其中作者描述了一种用于覆盖生成 ViewState 的默认行为的方法,而是展示了如何将其保存在服务器 Session 对象上。

在 ASP.NET 2.0 中,ViewState 由 PageStatePersister 类的后代保存。这个类是一个用于保存和加载 ViewsState 的抽象类,在 .Net Framework 中有两个实现了这个类的后代,名为 HiddenFieldPageStatePersister 和 SessionPageStatePersister。默认情况下 HiddenFieldPageStatePersister 用于保存/加载 ViewState 信息,但我们可以很容易地让 SessionPageStatePersister 工作并将 ViewState 保存在 Session 对象中。

虽然我没有测试他的代码,但它似乎准确地显示了你想要的:一种在回发之前在服务器上访问 ViewState 代码的方法。

于 2008-08-04T09:04:17.997 回答
2

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

protected override void SavePageStateToPersistenceMedium(object viewState)

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

于 2008-08-05T10:07:51.847 回答