This文章指出Page_PreInit
应该用于
创建或重新创建动态控件。
例如:
Button button = new Button();
somePanel.Controls.Add(button);
不可。我明白了。
然而,它还说:
如果请求是回发,则控件的值尚未显示 从视野状态恢复。如果在此处设置控件属性 阶段,它的价值可能会在下一次事件中被覆盖。
咦吗
这是否意味着我应该做的就是创建按钮,但不设置按钮的任何成员?
例如:
Button button = new Button() { CommandArgument="arg" };
somePanel.Controls.Add(button);
这是否意味着此事件中的CommandArgument
设置不正确/不推荐/可能导致错误/意外行为?
假设它不正确,这会让我觉得必须做这样的事情:
protected void Page_PreInit(object sender.....)
{
somePanel.Controls.Add((new Button());
}
protected void Page_Init(object sender.....)
{
foreach(Button button in somePanel.Controls)
button.CommandArgument = "arg";
}
这是正确的方法吗?
最后,应该在哪个事件中设置动态控件属性?
答案 0 :(得分:1)
对于最后一个问题没有单一答案,因为根据属性的性质,在特定方法中设置值可能有意义也可能没有意义。
如果请求是回发,则控件的值尚未显示 从视野状态恢复。如果在此处设置控件属性 阶段,它的价值可能会在下一次事件中被覆盖。
可能是这里的关键字。如果你认为某些属性可能会随着表单经历各种状态而发生变化,那么你必须要小心可能被覆盖的内容以及这是否是一件坏事的问题,因为它可能是更新的值应该是持久的,在其他情况下,原始值可能更好,例如,如果有人想将表单重置为其初始状态。
我的建议是做一些试验和错误,看看哪些有效,因为我记得使用动态控件,在某些情况下可能会很难管理。