【问题标题】:ViewState Chunking in asp.netasp.net 中的 ViewState 分块
【发布时间】:2012-05-11 22:35:36
【问题描述】:

我不断听到“Viewstate Chunking”这个词。 什么是视图状态分块?

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

【问题讨论】:

    标签: asp.net viewstate page-lifecycle


    【解决方案1】:

    当页面中的 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 之后:

    <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=" /> 
    

    希望对你有帮助!

    【讨论】:

    • EVENTVALIDATION 隐藏字段也可以变大。也可以分块吗?
    • 请注意 元素位于 web.config 中的 元素内。
    【解决方案2】:

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

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

    为什么我们需要 Viewstate Chunking?

    这是ViewState Overivew - MSDN的摘录

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-24
      • 2011-04-01
      • 1970-01-01
      • 2019-05-06
      • 1970-01-01
      • 2010-09-25
      • 1970-01-01
      • 2010-12-01
      相关资源
      最近更新 更多