在C#ASP.NET中动态调用方法
我以前见过用户解决这个问题,就像在线程中: 但是我在使用给定的代码方面没有太大的成功。我基本上是在尝试使用一些变量字符串调用一个方法 这是我到目前为止所拥有的在C#ASP.NET中动态调用方法,c#,asp.net,reflection,C#,Asp.net,Reflection,我以前见过用户解决这个问题,就像在线程中: 但是我在使用给定的代码方面没有太大的成功。我基本上是在尝试使用一些变量字符串调用一个方法 这是我到目前为止所拥有的 using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Model : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string TargetMethod = "Index";
Type t = System.Type.GetType("_Model");
System.Reflection.MethodInfo methodInfo = t.GetMethod(TargetMethod);
methodInfo.Invoke(t, new object[] {});
}
protected void Index(){
Response.Write("Index: Dynamically called!");
}
}
在查看页面上,我应该看到写入屏幕的字符串“Index:dynamiccalled!”,但我发现错误:
异常详细信息:System.NullReferenceException:对象引用不存在
设置为对象的实例
请帮助,谢谢。默认情况下,
GetMethod
只返回public
方法;添加BindingFlags.NonPublic | BindingFlags.Instance
,它应该可以工作
var methodInfo = t.GetMethod(TargetMethod,
BindingFlags.NonPublic | BindingFlags.Instance);
或同时为公共和非公共机构工作:
var methodInfo = t.GetMethod(TargetMethod,
BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
另外:它是一个实例方法,您希望在当前实例上调用它,因此:
methodInfo.Invoke(this, new object[] {});
请注意,
this
,而不是t
仍然不起作用,因为要调用的参数是错误的。不是t
,而是this
。他的代码中还有另一个错误。应该是methodInfo.Invoke(这个新对象[]{})
;我添加了:System.Reflection.MethodInfo MethodInfo=t.GetMethod(TargetMethod,BindingFlags.NonPublic | BindingFlags.Instance);但是现在我得到了错误:CS0103:名称“BindingFlags”在当前的文件中不存在context@Harvester316所以:像解决任何其他类型的问题一样解决它。在本例中,即System.Reflection
,因此可以使用System.Reflection添加代码>位于顶部,或显式使用System.Reflection.BindingFlags
。另外:只需按ctrl+。将自动为您解决此问题(让您选择采用哪种方法),非常感谢。它活蹦乱跳。asp.net的新功能。我使用记事本++,所以ctrl+对我不起作用。顺便问一下,我不知道为什么我的问题被降级了。我想我不是很清楚,或者太笨了,有些人不会对我好。哎呀。谢谢你,马克!!