我在 ASP 及其生命周期中有一个反复出现的问题,即在 Page_Load 事件引发之前捕获事件。例如,这里我正在自定义一个 gridview,它继承自 gridView 类。我添加了一个下拉列表来选择要跳转的页面(PageIndexChanged)。一切都会很好,除了这个下拉列表的 SelectedIndexChanged 事件在我渲染它之后被调用(网格和我的下拉列表在每次回发时重新生成)。所以我无法在其中选择正确的值。
所以我的事件只在第二次回发时提出,我总是迟到一个回发。
该下拉列表被添加到 RowCreated 事件中。我在其他事件中尝试过,但它是否为时已晚或太早(如果太晚则不渲染,如果太早则缺少元素)。
有什么解决办法吗?
PS:我发现这篇文章可以帮助我,但我不知道该怎么做:
进行控制或继承/扩展时要考虑的要点:
- 您必须通过覆盖调用 base.CreateChildControls() 的 CreateChildControls 来创建要引发事件的任何项目,然后执行您想要的任何操作(即在您的情况下添加行)。
- 列表项 DataBinding 您呈现的方式非常...非 kosher....您应该通过覆盖 DataBind() 来简化它,以便它清除子项,然后调用 EnsureChildControls(),然后添加新行...这样它很好的 ViewStated、持久化和事件管理。简单得多。
- 再次列出项目:也不要太早创建子控件:避免直接在 OnInit 或 onLoad 中创建子控件。这是一个错误。最好是让系统在需要时调用 EnsureChildControls(它会在第一页加载时在 PreRender 中,在 PostBack 中,如果它有子事件,则在 OnInit 之后调用它)......更糟糕的是,让 OnInit、OnLoad调用 EnsureChildControls()。