【问题标题】:C# dynamically generated controls in Page_Load or PreRender?C# 在 Page_Load 或 PreRender 中动态生成控件?
【发布时间】:2012-03-06 12:34:33
【问题描述】:

我有一个 c# Web 应用程序,我需要在其中动态生成控件,并且控件上的操作也会影响将呈现哪些控件。例如,想象一个按钮列表,其中每个按钮都应删除自身(及其在数据库中的引用)。我觉得我在这里不太了解一些非常基本的东西(至少应该是这样)

我想在这里使用事件处理程序。但是,问题是我应该在哪里生成控件,在 Page_Load 或 PreRender 中?如果我在 page_load 中生成它们,则事件处理程序尚未触发,因此生成的内容还不是最新的。我也可以在 PreRender 中生成它,但是事件处理程序不会触发,因为控件还不存在。

处理此问题的首选方法是什么?我真的想避免以后修改生成的内容的选项,在我的情况下这太容易出错了。我想在事件处理完毕后从头开始生成所有内容。目前我通过在生成控件之前检查 request.form 来部分解决这个问题,但是我有很多操作,在某些情况下它已经不是一个真正可行的解决方案。

【问题讨论】:

标签: c# pageload prerender


【解决方案1】:

我通过重写 OnInit 创建控件

这意味着它们可用于视图状态以恢复它们的任何值,OnLoad 为时已晚。

PreRender 用于最后一分钟的事情,例如填充文本框和渲染脚本

但请注意,您的控件必须在回发后以完全相同的方式重建,以便恢复值(相同的 ID 等)。

【讨论】:

  • 这对我有什么帮助。这将产生与我在 OnLoad 中生成它们时相同的问题 - 尚未处理事件。
  • 啊,我明白了问题所在,您想创建控件以响应被触发的事件。正如您所说,您必须在事件之后执行此操作,因此 OnPreRender 和事件方法本身一样是一个选项,但是由于我之前提到的原因,您可能会遇到视图状态问题。我会关闭这些控件的视图状态。你能用javascript构建这些控件吗?这将为您节省回发,有许多捕获值的方法(例如填充 asp.net HiddenTextbox?
  • 让我重新表述这个问题。如果您无法确定下次页面呈现时控件是否存在,您如何处理事件?这似乎不是一个奇怪的问题,对我来说这似乎很奇怪,在 .Net 中似乎很难做到
猜你喜欢
  • 2011-04-30
  • 1970-01-01
  • 2016-02-20
  • 1970-01-01
  • 1970-01-01
  • 2012-05-29
  • 1970-01-01
  • 2013-09-04
  • 1970-01-01
相关资源
最近更新 更多