【问题标题】:Failed to load viewstate - Content Place holder无法加载视图状态 - 内容占位符
【发布时间】:2012-01-17 07:45:47
【问题描述】:

我的母版页有一个内容占位符,我的页面有 2 个 rad 网格,位于单独的 asp:panels 中。 在下拉选择中,相应的网格被加载到页面中。

  1. 我从下拉列表中选择网格 1
  2. 点击添加新行,但不要取消或添加任何新行(让新行保持打开状态)
  3. 从下拉列表中选择 grid2,让网格加载
  4. 再次从下拉列表中选择 grid1

此时,grid1 打开,但出现以下 javascript 错误。

Microsoft JScript 运行时错误:Sys.WebForms.PageRequestManagerServerErrorException:加载视图状态失败。正在加载视图状态的控制树必须与在先前请求期间用于保存视图状态的控制树匹配。例如,动态添加控件时,在回发期间添加的控件必须与在初始请求期间添加的控件的类型和位置相匹配。

关于这个问题的任何想法。 我在一些论坛上读到问题可能是在单个内容占位符中使用相同类型的控件。关于解决方案的任何建议???

【问题讨论】:

    标签: c# asp.net viewstate contentplaceholder


    【解决方案1】:

    同一内容占位符中的同一类型控件不是问题。

    Failed to load viewstate. The control tree into which viewstate is being loaded must match the control tree that was used to save viewstate during the previous request.
    

    当您动态添加和删除控件时,最常发生这种情况。 仅仅改变可见性不应该给你一个错误。

    也许显示您的代码的某些部分会有所帮助。

    【讨论】:

    • 代码在所有情况下都运行良好。仅当一个网格处于编辑模式时才会出现此错误,并且没有退出编辑模式,我打开另一个网格并再次加载最初打开并处于编辑模式的网格。
    • 你能提供一些其他的帮助吗?否则代码不会出现任何问题,所有功能都可以完美运行。只有当网格处于编辑模式并且我重复上述步骤时,它才会给我错误。我尝试在下拉选择更改时清除视图状态,但尚未成功:(
    • 您可以尝试在更改网格之前取消新添加的行。您能否也提供此 RAD 网格组件的链接,我猜它不是标准的 asp.net 控件。
    【解决方案2】:

    如果没有更多信息,您的控件似乎在回发后不再出现在页面上。 您是要删除 rad 网格还是只是在需要时使它们可见? 也可以是您动态添加它们。我认为这可能会导致 radgrids 出现问题。

    我认为最好的解决方案是在用户做出新选择时使用 One grid 并对其进行操作。 如果网格彼此非常不同,我会添加多个并在从列表中选择时使它们可见(当您有超过 3 个选项时不要这样做)。

    【讨论】:

    • 是的,由于列数和复杂性的不同,我使用了 2 个网格。否则,即使我只喜欢 1 个网格。我只是让网格可见=假。我的 grid1 正在为所有不同的下拉值加载,但 grid2 仅用于 1 个项目。
    【解决方案3】:

    在重新绑定它们之前,我在下拉选择更改时清除了两个网格的控件。它解决了我的问题。

    radgrid1.Controls.Clear(); radgrid2.Controls.Clear();

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多