在asp.net中的ViewState Chunking

时间:2012-05-02 12:41:20

标签: asp.net viewstate page-lifecycle

我一直听到这个词“Viewstate Chunking”。 什么是Viewstate Chunking?

它是如何为ASP.NET页面工作的?

2 个答案:

答案 0 :(得分:16)

当页面中的ViewState变得非常大时,可能会出现问题,因为某些防火墙和代理会阻止访问包含巨大ViewState大小的页面。为此,ASP.NET引入了ViewState Chunking机制。因此,ASP.NET允许使用web.config部分中的MaxPageStateFieldLength属性将ViewState的单个隐藏字段拆分为多个。

当MaxPageStateFieldLength属性设置为正数时,发送到客户端浏览器的视图状态将分解为多个隐藏字段。

将MaxPageStateFieldLength属性设置为负数(默认值)表示不应将视图状态字段分隔为块。将MaxPageStateFieldLength设置为较小的数字可能会导致性能下降。

之前的示例ViewState:

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"value="/wEPDwUKLTk2Njk3OTQxNg9kFgICAw9kFgICCQ88KwANAGQYAQUJR3Jp
ZFZpZXcxD2dk4sjERFfnDXV/hMFGAL10HQUnZbk=" />

然后在web.config中设置:

<pages maxPageStateFieldLength="40">

示例ViewState After:

<input type="hidden" name="__VIEWSTATEFIELDCOUNT" id="__VIEWSTATEFIELDCOUNT"value="3" />
<input type="hidden" name="__VIEWSTATE"
id="__VIEWSTATE" value="/wEPDwUKLTk2Njk3OTQxNg9kFgICAw9kFgICCQ88" />
<input type="hidden" name="__VIEWSTATE1"
id="__VIEWSTATE1" value="KwANAGQYAQUJR3JpZFZpZXcxD2dk4sjERFfnDXV/" />
<input type="hidden" name="__VIEWSTATE2"
id="__VIEWSTATE2" value="hMFGAL10HQUnZbk=" /> 

希望对你有帮助!

答案 1 :(得分:4)

来自What's New in ASP.NET State Management - MSDN

  

如果视图状态数据量变得太大,则视图状态   chunking会自动将数据拆分成块并放入   数据到多个隐藏表单字段。

为什么我们需要Viewstate Chunking?

以下是ViewState Overivew - MSDN

的摘录
  

另一个重要的考虑因素是,如果数据量在   隐藏字段变大,一些代理和防火墙将阻止   访问包含它们的页面。因为最大量可以   随着防火墙和代理实施的不同而变化,大隐藏   字段可能会导致零星的问题。为了帮助避免这个问题,如果   存储在ViewState属性中的数据量超过该值   页面的MaxPageStateFieldLength属性中指定的页面   将视图状态拆分为多个隐藏字段以减小其大小   每个单独的字段低于防火墙拒绝的大小。