在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+对我不起作用。顺便问一下,我不知道为什么我的问题被降级了。我想我不是很清楚,或者太笨了,有些人不会对我好。哎呀。谢谢你,马克!!