我有一个ASPX页面,它调用用户控件(ASCX)来呈现表单。该控件包括单击某个按钮时触发的代码隐藏,如下所示:
Protected Sub ClickControlButton(ByVal sender as Object, ByVal e as System.EventArgs)
' run some code
' need to put something here, which I'll explain below
Response.Redirect(Request.RawUrl)
End Sub
(例如,让我们说这个控件叫做ChildControl.ascx。注意:Response.Redirect调用最终返回到父页面,因此当它触发时,它会有效地重新加载页面。)ChildControl.ascx是嵌入另一个我称之为ParentPage.aspx的表单中。
我需要这个sub来调用中的另一个子页面(让我们称之为ParentPage.aspx)代码隐藏一个由ParentPage.aspx继承的实例(请参阅下面的编辑说明< / em>),像这样:
Protected Sub SomeFunction()
'run some more code
End Sub
在重定向发生之前我需要这个名为的文件。所以,实际上,当所有的事情都说完了,我需要我的控制代码看起来像这样:
Protected Sub ClickControlButton(ByVal sender as Object, ByVal e as System.EventArgs)
' run some code
SomeFunction()
Response.Redirect(Request.RawUrl)
End Sub
但是,控件无法识别SomeFunction(),可能是因为它是受保护的Sub,而不是Public,( EDIT ),它是一个实例类。我试图避免将其更改为Public Sub。
我将如何处理此事?
提前致谢。 。
编辑:一位比我更了解这个系统的同事指出,我试图访问的方法不在ParentPage.aspx中,正如我之前提到的那样,但实际上是一个存储在单独的VB文件中的实例方法(但是,它可以通过从ParentPage.aspx继承来访问 - 为我原始问题中的混淆道歉)。因此,在这种情况下,反射是行不通的。
答案 0 :(得分:1)
首先,确保使用对象浏览器确保父页面中的sub实际受到保护(在设置下拉图标中,单击Show Protected并确保该功能受到保护)。如果不是,您可能没有将页面对象强制转换为实际类型的对象,因此当您有Option Strict On时,intelisense不会检测到该方法。
如果它真正受到保护且无法访问,唯一的方法是使用Reflection来调用sub。
以下是System.Reflection的一些阅读材料
答案 1 :(得分:0)
在与同事协商后,我将该方法变为公共共享子。
唉!