2013-03-15 31 views
3

我見過的用戶線程之前解決這個問題,如: C# very dynamic invocation動態調用C#ASP.NET的方法

但我還沒有與給定的代碼很成功。我基本上試圖調用一個使用一些變量字符串的方法。

這是我到目前爲止。

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:Dynamically called!」寫入屏幕,但我得到錯誤:

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

請幫助,謝謝。

回答

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

+0

仍然無法正常工作,因爲Invoke的參數是錯誤的。它應該是'this'而不是't'。 – 2013-03-15 13:28:10

+0

@BennorMcCarthy已經在編輯:) – 2013-03-15 13:28:43

+0

他的代碼還有另一個錯誤。應該是'methodInfo.Invoke(this,new object [] {})'; – hazzik 2013-03-15 13:29:00