C# 从不同的代码隐藏更改ascx内容

C# 从不同的代码隐藏更改ascx内容,c#,javascript,asp.net,.net,webforms,C#,Javascript,Asp.net,.net,Webforms,假设我有tvo页面,page1.ascx和page2.ascx。两个页面都有代码隐藏(分别为page1.ascx.cs和page2.ascx.cs) 因此,page1和page2在浏览器中同时并排呈现 现在page1.ascx有一个ListView,它的代码隐藏有一个填充它的方法(PopulateListbox())。如何从page2.ascx代码中调用PopulateListbox() page1 p1 = new page1(); p1.PopulateListbox(); …不起作用,

假设我有tvo页面,page1.ascx和page2.ascx。两个页面都有代码隐藏(分别为page1.ascx.cs和page2.ascx.cs)

因此,page1和page2在浏览器中同时并排呈现

现在page1.ascx有一个ListView,它的代码隐藏有一个填充它的方法(PopulateListbox())。如何从page2.ascx代码中调用PopulateListbox()

page1 p1 = new page1();
p1.PopulateListbox(); 
…不起作用,查找列表框ID的findController返回空值

任何指导都会有很大帮助,谢谢

var p1 = this.Page.FindControl("page1Id") as page1;
if (p1 != null)
   p1.PopulateListbox();
不过,你可以用另一种方式来做。为特定操作在第一个控件上创建事件。在父页面中添加一个事件处理程序,该事件处理程序将包含以下调用

p1.PopulateListbox();

关于如何创建自己的事件的链接

直接从另一个用户控件访问一个用户控件方法听起来不是一个好的设计

您可以做的是在page2.ascx中创建一个委托,当需要在其他用户控件中执行刷新操作时,该委托将被调用

您的aspx页面订阅该委托,并调用page1.ascx PopulateListBox方法


因此,您的页面协调了两个用户控件之间的交互,而它们彼此不了解。

请确认PopulateListbox()是否为公共控件。在第一个示例中,p1始终为空。我会继续尝试使用事件处理程序。是的,至少我认为我是。无论如何,我认为事件实现是一种更“干净”的方式来实现这一点,而且效果很好。非常感谢。