我正在努力找到一遍又一遍地动态创建同一页面的明确答案。我发现的问题和样本似乎都是关于这一主题的全面讨论。我已经研究了生命周期,但似乎仍然没有明确的答案,代码应该去哪里。
我有一个母版页和一个内容页面。需要动态创建内容区域中的所有内容(文本框,ddl,页面选项卡,按钮/ onclick等)。
用户填写数据并单击提交按钮后,我需要从表单中读取值并再次完全重建页面(不添加/删除当前内容的控件)。
我的问题是。 我在哪里放置代码来构建页面? 这个区域是否允许我使用IsPostBack,以便我可以使用Request.Form值重建内容? 我的按钮_Click事件会起作用吗? 你有什么工作样品可以指导我吗?
非常感谢您的反馈......
答案 0 :(得分:1)
我不知道你问题的所有答案,但我希望这可以让你开始。通过代码动态生成UI时,会发生在Init中。在Init上动态加载的控件是关键,因为在init和load之间,在回发时,为这些控件加载了viewstate。
这意味着你需要在每次回发时重新创建页面以匹配前一个控制树,然后在init之后解构它并重新创建新的UI,如果某些内容应该改变UI的话。这是因为它验证树结构以确定其相同的UI。现在,如果您不需要viewstate,这可能不是一个问题。我没有在没有viewstate的情况下验证这一点,看它是否表现不同。
这取决于你需要它的动态,是否需要viewstate(是一个重要因素)。
HTH。
答案 1 :(得分:1)
尝试在页面的PreInit方法中创建控件。 “IsPostBack”应该可以工作,点击事件处理程序也可以正常工作。
答案 2 :(得分:0)
您需要的是网络用户控件,请参阅ASP.NET User Controls
答案 3 :(得分:0)
Brian的建议很好,你应该遵循它们。
这可能不会真正回答您的问题,但我仍然将其添加为建议。我专业地创建了相当大规模的ASP.net Web应用程序,根据我的经验,我可以说太多“动态”通常很糟糕,应该避免,因为它只是引入了复杂性。通常,您可能希望将UI部件公开到ASP.net UserControls中,或者如果您希望将它们更加可重用(如果这是一个因素),那么请进入ASP.net Server控件。然后你动态地替换它们,而不是从头开始创建所有东西。