【问题标题】:How to call ASCX page Function on ASPX page?如何在 ASPX 页面上调用 ASCX 页面函数?
【发布时间】: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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多