我有很多在 ASP.NET 页面中动态创建的 Web 控件。在某些回发场景中(当我单击链接按钮时),我想跳过加载旧的 Web 控件树并立即生成新树。不幸的是,当我生成新树时,旧树的视图状态被加载到其中。
我希望能够针对这个特定场景禁用视图状态加载过程,但是在加载新树后,视图状态应该可以正常工作。
通过覆盖 Web 控件的 LoadViewState 方法,我已经解决了部分问题,但不幸的是,这会禁用特定于控件的视图状态,而不是针对他的孩子(文本框、按钮等)。
可能吗?
谢谢你。
我有很多在 ASP.NET 页面中动态创建的 Web 控件。在某些回发场景中(当我单击链接按钮时),我想跳过加载旧的 Web 控件树并立即生成新树。不幸的是,当我生成新树时,旧树的视图状态被加载到其中。
我希望能够针对这个特定场景禁用视图状态加载过程,但是在加载新树后,视图状态应该可以正常工作。
通过覆盖 Web 控件的 LoadViewState 方法,我已经解决了部分问题,但不幸的是,这会禁用特定于控件的视图状态,而不是针对他的孩子(文本框、按钮等)。
可能吗?
谢谢你。
您可以在加载视图状态后尝试创建新树,例如在 Page_Load 中。
我已经在这里回答了:
您可以通过在将新数据绑定到树之前清除树的内容以编程方式执行此操作。它应该类似于以下内容
tree.nodes.clear()
然后你就像树是空的一样继续,并通过限制它或通过以编程方式添加节点来添加数据
tree.Nodes.Add(New TreeNode("name of node"))
现在对于我收集到的您正在使用的常规控件,如果您不使用视图状态,您将遇到一大堆问题。您可以使用 controlname.controls.clear 以类似的方式将它们从控制树中删除。现在您的问题主要是附加这些控件还是您不想承担视图状态的负担?我建议如果是后者,您可以通过编程方式清除控件并将视图状态服务器端存储在某处,以便可以从内存中加载它而不是使用您的带宽。
至于控件的动态加载,您需要确保您的新控件为它们携带不同的 ID。我在其中一个应用程序中所做的实际上是保留旧控件,使它们不可见并清除视图状态,然后在下一次调用时我实际上将它们从树中删除。