如何调用ASPX页面上的ASCX页面功能?

问题描述:

我添加了WebUserControl在运行,所以我不能使用MyWebUserControl.MyFunction(),我有一个母版和我想这一个:如何调用ASPX页面上的ASCX页面功能?

_MainContentPage = CType(_Page.Form.FindControl("MyContentPlaceHolder"), ContentPlaceHolder) 
CType(_MainContentPage.FindControl("MyWebUserControl"), myType) 

_MainContentPage.FindControl("MyWebUserControl")返回一个TableCell的。

我的方式添加WubUserControl:

tcValue = New TableCell()  
tcValue.Controls.Add(_Page.LoadControl("Paht/WebUserControl")) 
tcValue.ID = "MyWebUserControl" 

那么这就是原因_MainContentPage.FindControl("MyWebUserControl")返回TableCell的 但如何让Web控件,并调用Fcuntion。

+0

您可能必须使用反射来探测用户控件类,然后调用该方法。 – AlwaysAProgrammer 2013-04-05 18:00:02

+0

谢谢,但我已经做到了(请参阅问题更新) – Logar314159 2013-04-05 18:27:23

+0

假设您的ascx位于占位符中,您是否可以遍历占位符中的控件并执行类似'If(TypeOf(control)is MyAscx')然后DirectCast控制,MyAscx).MyMethod()'? – valverij 2013-04-05 18:40:11

解决方法是获取TableCell,然后找到控件,然后调用该函数。

_MainContentPage = CType(_Page.Form.FindControl("MyContentPlaceHolder"),ContentPlaceHolder) 
MyTableCell = CType(_MainContentPage.FindControl("MyWebUserControl"), TableCell) 
MyWebControl = CType(MyTableCell.Controls(0), MyType) 
MyWebControl.MyFunction() 

要将该函数作为Web方法或在asp.net http处理程序中抽取该函数以全局访问,这是多么困难。我认为这样你可以做得更好,而不是使用反射和其他东西来访问它。

+0

那么...另一种方式来做到这一点,谢谢。 – Logar314159 2013-04-05 18:51:26