【发布时间】:2013-04-05 17:38:05
【问题描述】:
我在运行时添加了 WebUserControl,所以我不能使用MyWebUserControl.MyFunction(),我有一个 MasterPage,我试过这个:
_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
但是如何获取Webcontrol并调用Function。
【问题讨论】:
-
您可能必须使用反射来探测用户控件类,然后调用该方法。
-
谢谢,但我已经成功了(见问题更新)
-
假设您的 ascx 在占位符中,您能否遍历占位符中的控件并执行
If (TypeOf(control) Is MyAscx) Then DirectCast(control, MyAscx).MyMethod()之类的操作? -
不错的想法 Valverij,谢谢,但这是不是很有效的方法?
-
这实际上取决于您的 ascx 如何添加到占位符以及占位符中有多少控件。如果它只包含一些,则差异可能可以忽略不计。它有几百个,那么你可能会看到轻微的性能下降。真的,使用任何你认为在未来最易读和可维护的东西。不过,如果可能的话,我建议不要使用硬编码 ID,并将特定于 aspx 和控件的代码保留在母版页之外。
标签: asp.net vb.net user-controls webusercontrol