正确使用 asp.net webforms 生命周期
Posted
技术标签:
【中文标题】正确使用 asp.net webforms 生命周期【英文标题】:Proper use of asp.net webforms lifecycle 【发布时间】:2012-06-16 13:46:02 【问题描述】:这确实是一个更笼统的问题,但我能想到的唯一方法是举一个具体的例子。
我们目前有一个带有SPGridView
的网络部件。现在,GV 和所有绑定字段都在CreateChildControls
中创建,数据在OnPreRender
中检索和绑定。这些列是静态的,因此可以正常工作。
CreateChildControls
// create and configure the gridview
// create all bound fields and add them to the gridview
// add the gridview to the page
OnPreRender
// get the data and bind it to the gridview
现在我们需要将列更改为取决于用户从下拉列表中所做的选择。在CreateChildControls
中,我们无法从下拉控件中获取值,因此我们无法有条件地添加绑定字段。我的问题是,这里的最佳做法是什么?我们可以在CreateChildControls
中创建所有可能的绑定字段,然后只将适当的字段添加到OnPreRender
中的GV。我们可以将所有绑定字段的创建完全移动到OnPreRender
。还有很多其他的选择。
CreateChildControls
// create and configure the gridview
// create ALL bound fields here?
// add the gridview to the page
OnPreRender
// or maybe create only the applicable bound fields here?
// add the appropriate fields to the gridview
// get the data and bind it to the gridview
从更一般的意义上说,什么真正构成了“创建”控件(CreateChildControls
的目的)?这个问题确实延伸到任何可能具有动态内容的控件。将条目添加到下拉列表等的合适位置在哪里。有很多工作方式,但哪种方式是“正确的”?是否将选择添加到“创建”控件的下拉部分?是否取决于选择是否是动态的?
【问题讨论】:
可能不是一个完整的答案,但这里有一些 light 从 MSDN 阅读的关于 ASP.NET 页面生命周期的内容。另请注意页面底部的一些 cmets,以提供更多信息/评论。编辑:如果我包含链接有帮助:msdn.microsoft.com/en-us/library/ms178472.aspx 【参考方案1】:BoundField
不是控件,gridview 中的Columns
集合是状态管理的,因此您可以在对控件进行数据绑定之前安全地在PreRender
事件中添加列。
【讨论】:
以上是关于正确使用 asp.net webforms 生命周期的主要内容,如果未能解决你的问题,请参考以下文章
在 asp net 框架(webforms)中使用 microsoft api 登录