【问题标题】:Losing the viewstate失去视图状态
【发布时间】:2010-09-30 13:37:03
【问题描述】:

我在视图状态中存储了一些属性,因此我可以轻松地在 Ajax 请求中使用它们。我的属性代码如下所示:

public Language Language
{
    get { return (Language)ViewState["controls_window_Language"]; }
    set { ViewState["controls_window_Language"] = value; }
}

但是,我的客户报告了一些错误,当我找到它时,这是因为 Language 为空。它不会每次都发生;它似乎是完全随机的,我无法重现该错误。我还在视图状态中存储了其他属性,并且我在语言之前使用了该属性,所以我没有丢失所有视图状态。

最合乎逻辑的原因是语言被覆盖了,但我唯一一次写它是在页面首次加载时。

我的 viewstate 属性丢失的原因是什么?

【问题讨论】:

  • 您使用的是什么形式的 AJAX?是否是 Microsoft ASPX 模型(通常是更新面板)导致完整的帖子返回到页面(和页面事件?)
  • “我写它的唯一时间是页面第一次加载的时候”——我们能看到那个代码吗?
  • 是的,我使用 Ajax.Net 和更新面板。
  • 代码在 if(!IsPostBack) { ... } 内,因此不会在回发时被覆盖。

标签: asp.net viewstate


【解决方案1】:

我不确定这是否是问题所在,但在浏览器中使用后退/前进导航通常会导致意外结果,尤其是在使用大量异步调用的页面上。

编辑:澄清我的想法...

我建议这可能是用户看到错误但您无法重现问题的原因。这是我经常忘记的故障排除步骤...

【讨论】:

    【解决方案2】:

    你说你在页面第一次加载时写入视图状态。

    你怎么知道这是第一次加载页面,你的应用中是否有可以绕过设置的导航路线。

    作为一种快速修复,您可以尝试检查该值是否为空,然后返回一个默认值。

    【讨论】:

    • 我在 if(!IsPostback) { ... } 中设置了值,页面上的所有其他请求都通过 ajax.net。我会做那个快速修复,但如果我感觉有点可怕,我会失去一些视图状态。
    【解决方案3】:

    试试看global.asax中的Session_OnError事件和你的ViewState问题有没有联系

    【讨论】:

      【解决方案4】:
      【解决方案5】:

      “丢失” ViewState 内容的一个可能原因是输出缓存。我面临同样的问题,原因是缓存(当我禁用它时,问题不会发生)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-04
        • 1970-01-01
        • 1970-01-01
        • 2021-03-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多