在C#ASP.NET中动态调用方法

时间:2013-03-15 13:24:17

标签: c# asp.net reflection

我之前见过用户解决这个问题,比如在线程中: C# very dynamic invocation

但是我给出的代码没有取得多大成功。我基本上试图使用一些变量字符串来调用方法。

这是我到目前为止所拥有的。

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:动态调用!”写在屏幕上,但我收到错误:

  

异常详细信息:System.NullReferenceException:不是对象引用   设置为对象的实例。

请帮助,谢谢。

1 个答案:

答案 0 :(得分:3)

默认情况下,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