This文章指出 Page_PreInit
应该用于
create or re-create dynamic controls.
例如:
Button button = new Button();
somePanel.Controls.Add(button);
很好。我明白了。
但是,它还说:
If the request is a postback, the values of the controls have not yet been restored from view state. If you set a control property at this stage, its value might be overwritten in the next event.
嗯?
这是否意味着我应该做的只是创建按钮,而不是设置按钮的任何成员?
例如:
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";
}
这是正确的方法吗?
最后,应该在什么情况下设置动态控件属性?
最佳答案
最后一个问题没有单一的答案,因为根据属性的性质,在特定方法中设置值可能有意义也可能没有意义。
If the request is a postback, the values of the controls have not yet been restored from view state. If you set a control property at this stage, its value might be overwritten in the next event.
力量是这里的关键词。如果您考虑一些属性可能会随着表单经历各种状态而改变,那么您必须注意可能被覆盖的内容以及这是否是一件坏事的问题,因为它可能是更新的值应该是持久的,在其他情况下,原始值可能更好,例如有人想将表单重置为初始状态。
我的建议是做一些试验和错误,看看什么是有效的,因为我记得使用动态控件在某些情况下可能很难正确管理。
关于c# - 在什么情况下应该设置动态控件属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9419779/