我一直听到"Viewstate Chunking“这个词。什么是Viewstate Chunking?
它是如何在ASP.NET页面上工作的呢?
发布于 2012-09-06 03:27:50
当页面中的ViewState变得非常大时,这可能是一个问题,因为一些防火墙和代理将阻止访问包含巨大ViewState大小的页面。为此,ASP.NET引入了ViewState分块机制。因此,ASP.NET支持使用web.config部分中的MaxPageStateFieldLength属性将视图状态的单个隐藏字段拆分为多个字段。
当MaxPageStateFieldLength属性设置为正数时,发送到客户端浏览器的视图状态将被分解为多个隐藏字段。
将MaxPageStateFieldLength属性设置为负数(默认值)指示不应将视图状态字段分成多个块。将MaxPageStateFieldLength设置为较小的数字可能会导致性能较差。
之前的ViewState示例:
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"value="/wEPDwUKLTk2Njk3OTQxNg9kFgICAw9kFgICCQ88KwANAGQYAQUJR3Jp
ZFZpZXcxD2dk4sjERFfnDXV/hMFGAL10HQUnZbk=" />然后在web.config中设置:
<pages maxPageStateFieldLength="40">下面是示例ViewState:
<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=" /> 希望能对你有所帮助!
发布于 2012-05-02 20:43:38
来自What's New in ASP.NET State Management - MSDN
如果视图状态数据量变得太大,视图状态分块将自动将数据拆分成块,并将数据放入多个隐藏表单字段中。
为什么需要视图状态分块?
这是一段来自ViewState Overivew - MSDN的实验
另一个重要的注意事项是,如果隐藏字段中的数据量变得很大,某些代理和防火墙将阻止访问包含它们的页面。由于最大数量可能随不同的防火墙和代理实现而变化,因此较大的隐藏字段可能会导致零星的问题。为了帮助避免此问题,如果存储在ViewState属性中的数据量超过了页的MaxPageStateFieldLength属性中指定的值,则该页将视图状态拆分为多个隐藏字段,以将每个字段的大小减小到防火墙拒绝的大小以下。
https://stackoverflow.com/questions/10413986
复制相似问题