c# - 在什么情况下应该设置动态控件属性?

标签 c# asp.net webforms page-lifecycle

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/

相关文章:

c# - 将键码转换为字符/字符串

c# - 如何在 ASP.NET MVC 中更改菜单标题(垂直到水平)

c# - 如何通过单击另一个gridview中的链接按钮在jquery对话框中显示Gridview

c# - 使用 iTextSharp C# 更改 PDF 注释属性

javascript - Selenium 表格提交

asp.net - Httpruntime 缓存键不唯一?

c# - 如何在 asp.net 中将 Page_load 重命名为 PageName_load

c# - 数据源不支持更新,除非指定了 UpdateCommand

javascript - AJAX/ASP.NET 问题

javascript - 只要单击页面上的任何内容, Bootstrap 工具提示就会停止工作