1

我想在后面的代码中为服务器控件属性分配值以“初始化”表单。我不需要/不希望将这些值添加到视图状态。(我知道我可以禁用特定控件的视图状态,但我需要视图状态,因为某些值可能会更改并且需要在回发期间保留。)

目前对我来说,如果不将它们添加到视图状态中,似乎不可能在代码中加载这些值。

据我了解,会发生以下情况:

页面:预初始化

我可以在这里向某些控件添加值(例如,它使用文字控件来设置文本值)但是由于控件的 init 方法稍后执行,因此我无法在此阶段找到 RegisterUser 控件及其子控件,它们是仍然为空。> 所以在这种特定情况下没有解决方案,还有更多情况

控制:初始化

我无法从我的页面中达到这一点,这只能在用户控件代码中使用,例如,当您编写自己的用户控件并想要初始化其值时,我当然不想为我需要的每个控件创建自己的控件首先执行一些逻辑进行初始化。

控制:TrackViewState

视图状态跟踪已启用,因此从这里开始,我设置的任何内容都将被标记为“脏”并因此添加到视图状态中。页面:初始化页面:TrackViewState

所以我说得对吗:

在后面的代码中,不禁用控件视图状态属性..

  • 您可以在 PreIinit 方法中从页面控件初始化“第一级”子控件属性,而无需将值添加到视图状态。
  • 如果没有将值添加到视图状态,则无法从作为页面“第一级”子控件的控件初始化子控件属性。?

然后,

  • 可以使用资源以声明方式初始化控件属性,但这并不能规避需要执行逻辑的场景
  • 您可以使用数据绑定语法执行逻辑,但您必须手动调用具有与上述相同问题的控件上的数据绑定

如果没有将这些值添加到视图状态,是否没有办法迭代一组控件/子控件并在代码中启动值?

4

1 回答 1

1

由于此处没有任何反应和一些进一步的研究,我现在可以得出结论,由于在问题。

然而,这里有一些部分解决方案:http ://weblogs.asp.net/infinitiesloop/archive/2006/08/03/Truly-Understanding-Viewstate.aspx

一种可能性是以声明方式连接到控件本身的 init 事件,您必须为每个控件执行此操作。在后面的代码中,在事件处理程序中,您可以设置属性,并且由于视图状态未跟踪但它不会保存在视图状态中。

对于不同的场景有更多选项,例如通过重写 CreateChildControls 方法来初始化自定义控件内动态添加的子控件。绝对值得一读上面提到的“真正理解 Viewstate”链接。

于 2012-07-30T09:34:07.727 回答