C# 当用户控件在ASP.NET中完成加载时,向父页触发事件

C# 当用户控件在ASP.NET中完成加载时,向父页触发事件,c#,asp.net,C#,Asp.net,我正在处理一个ASP.NET项目,该项目是由公司其他地方的一个团队创建的。我正在使用的其中一个页面具有一个userControl,它查询数据库以填充通用字段。然后父页面(即包含userControl的页面)使用此查询中的信息设置下拉列表的selectedIndex 我遇到的问题是,父页面在userControl之前加载,这意味着父页面在查询结果可用之前加载。因此,下拉列表的selectedIndex仅设置为默认索引 根据jrista对的回答,我知道page.OnLoad事件在userContro

我正在处理一个ASP.NET项目,该项目是由公司其他地方的一个团队创建的。我正在使用的其中一个页面具有一个userControl,它查询数据库以填充通用字段。然后父页面(即包含userControl的页面)使用此查询中的信息设置下拉列表的selectedIndex

我遇到的问题是,父页面在userControl之前加载,这意味着父页面在查询结果可用之前加载。因此,下拉列表的selectedIndex仅设置为默认索引

根据jrista对的回答,我知道page.OnLoad事件在userControl.OnLoad事件之前触发。我还了解到,用户控件没有OnLoadComplete事件,我希望可以使用它来创建一个事件,在用户控件完成加载时在父页面上触发


我听说预渲染事件可以达到相同的效果,但这是唯一的方法吗?当用户控件完成加载时,是否有更好的方法将事件从用户控件激发到父页面?或者这不是一个好的做法,我是否最好以某种方式更改代码以避免这种情况?

首先创建一个界面,您的页面将这样实现:

 public interface INotifyChildLoaded
 {
     void OnUserControlLoaded(Control control);
 }
然后,在页面上实现该接口

 public class MyPage : Page, INotifyChildLoaded
 { 
     public void OnUserControlLoaded(Control control) { ... }
     ....
 }
最后,在用户控件加载事件期间,调用以下方法:

 public void MyControl_OnLoad(object sender, EventArgs e) 
 {
     ....
     (Page as INotifyChildLoaded).OnUserControlLoaded(this);
 }

页面预呈现应该是良好的,这是在控件加载之后。我记得PreRender是在向用户显示数据之前填充数据的最后一步。如果您想要比PreRender更晚的更新,您可以在页面呈现给用户之后使用ajax,但在这种情况下不需要。是的,我考虑过使用ajax,但我认为在这种情况下,PreRender是一个更优雅的解决方案。如果我没有实现Nathan的解决方案,我想我会使用PreRender。