【发布时间】:2010-09-17 02:53:36
【问题描述】:
我想根据某些特定条件向页面添加更多控件。这些控件不需要任何 ViewState 或绑定数据,它就像静态链接一样简单。
我想知道我可以在哪里编写代码:在OnLoad 或OnInit 方法内?为什么?如果我将它放在OnLoad 中,是否应该在任何初始化代码之前添加以下行:if (IsPostBack) return;?
【问题讨论】:
我想根据某些特定条件向页面添加更多控件。这些控件不需要任何 ViewState 或绑定数据,它就像静态链接一样简单。
我想知道我可以在哪里编写代码:在OnLoad 或OnInit 方法内?为什么?如果我将它放在OnLoad 中,是否应该在任何初始化代码之前添加以下行:if (IsPostBack) return;?
【问题讨论】:
您可以在 OnInit 方法或 OnLoad 中添加控件,无论它们是否需要视图状态。 (原因是因为一旦您将控件添加到 Page 控件就会加载其视图状态,即使您在 LoadViewState 阶段之后添加它也是如此......)
我是否应该在任何初始化代码之前添加以下行:
if (IsPostBack) return;?
没有。必须在每次页面加载时将动态添加的控件添加到控件层次结构中,而不仅仅是初始页面。
如果您打算使用动态添加的 Web 控件,我强烈建议您阅读以下两篇文章:
有关基于某些外部条件(例如数据库中的配置)动态加载控件的工作的端到端示例,请参阅Creating a Dynamic Data-Driven User Interface。
编程愉快!
【讨论】:
Page_Load 中,则只需在初始页面加载时填充。但是,如果代码在 OnInit 中,则需要在每次页面加载时进行填充。
我建议将控件静态添加到页面,并在满足条件时将其可见性切换为“真”。当它们不可见时,它们不会向页面呈现任何内容,这将为您省去很多麻烦,尤其是因为听起来您对动态控件还很陌生。
【讨论】:
我不确定我是否完全理解,但我会亲自在页面上放置一个 asp:Literal(或多个,如果您在不同的地方需要它们),然后在 OnLoad 事件中创建您需要的 HTML。
如果你这样做,那么你放入该文字的 html 将保存在视图状态中,因此你不会在回发时重做它。
【讨论】:
【讨论】: