我试图通过放置在同一页面上的以下代码来查询的ASP.NET代码中的ASP.NET代码中的方法。
MethodInfo MyMethod = this.GetType().GetMethod("Create", BindingFlags.Static);
但这总是返回null
,更奇怪的是,在运行时,this
的类型不是MyAssembly.MyPage
,该类型显示为ASP.MyPage_aspx
。这类型是什么?为什么我没有看到班级类型背后的原始代码?我在哪里找到它?
任何想法如何解决此问题?
asp.net编译器创建一个从您的页面类继承的新类。因此,它将具有类似的东西:
namespace ASP
{
[CompilerGlobalScope]
public class MyPage_aspx : MyPage, IHttpHandler
{
// all methods that resulted from parsing your ASPX page
// Build controls, write literal text, etc
}
}
生成的代码可以在您的用户配置文件的AppData文件夹中或.NET Framework文件夹中找到临时ASP.NET文件文件文件夹,但也是可配置的它将在哪里存储这些中间CS文件和组件。
从页面中找到静态方法(但需要公开或受保护)添加以下bindingflag
BindingFlags.FlattenHierarchy
基于getMethod文档中的备注:
指定
BindingFlags.FlattenHierarchy
包括公共和受保护的静态成员层次结构;不包括继承类中的私人静态成员。
因此,您的呼叫至少将包含该绑定。除此之外,您还需要InvokeMethod广告公共标志才能返回该方法。完整的电话应该看起来像:
var MyMethod = this.GetType().
GetMethod(
"Create",
BindingFlags.Static |
BindingFlags.FlattenHierarchy |
BindingFlags.InvokeMethod |
BindingFlags.Public);
这确实假定您的Create
方法确实是静态的,而不是私人实例方法。