【问题标题】:Dynamic Controls, Disabling ViewState and Postbacks动态控件,禁用 ViewState 和回发
【发布时间】:2013-01-10 10:10:31
【问题描述】:

在尝试解决动态用户控件的ViewState 丢失问题后,我决定永久禁用ViewState

问题是我现在该怎么办?我应该如何保持动态控件的状态,以免它们在回发后丢失。我正在考虑改用 Session ,但这意味着我必须为用户打开的每个页面/选项卡生成唯一的键,以便不会覆盖值(对吗?)。最好的方法是什么?

【问题讨论】:

  • 我最终禁用了 ViewState 并改用了 HiddenFields。

标签: c# asp.net webforms viewstate


【解决方案1】:

为了确保动态用户控件的视图状态,您需要确保

  • 在每个回发场景中都会创建动态控件
  • 它们在页面生命周期中尽早创建 - 初始化和加载状态是最好的选择(在控制事件中加载它们不太可能起作用)
  • 动态控件层次结构应完全相同,层次结构中的所有控件都应具有与先前请求中相同的 ID
  • 始终分配 ID(否则它们可能会自动生成并具有不同的值)并且应在将控件添加到控件树中之前进行分配。

将视图状态存储更改为会话而不是隐藏字段不会解决 ASP.NET 运行时已经加载视图状态或无法将控件与其视图状态数据相关联的问题(推断自id 和层次结构)

【讨论】:

  • 我可以验证控件在每次回发后获得相同的 UniqueID。加载两个相同类型的动态控件是否可能会导致问题?尽管它们具有不同的唯一 ID,但它们具有相同的服务器端 ID。
  • @Kta,只要命名容器不同(即不同的唯一 id),这应该不是问题。确保在将控件添加到父级之前分配了 id。您可以覆盖LoadControlState/SaveControlState 来检查视图状态包!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-13
  • 2010-12-10
  • 1970-01-01
  • 1970-01-01
  • 2011-05-12
  • 1970-01-01
  • 2012-03-20
相关资源
最近更新 更多