2011-10-05 74 views
1

假設我有一個Test.aspx頁面以及test.aspx.vb.當方法名稱包含在字符串中時調用方法

Test.aspx.vb包含一個類名「TestClass」。在那個類中我有method1(),method2()和method3()

我需要能夠調用其中的一種方法,但我不能硬編碼它,要執行的方法來自一個字符串。

我不能做

Select Case StringContainingTheNameOfTheDesiredMethod 
    Case "Method1" 
     Method1() 
    Case "Method2" 
     Method2() 
end case 

我可以找到如何處理反射(I followed that example)。我的問題是這些方法可能需要與test.aspx進行交互,但是當我使用.invoke時,它似乎創建了一個新線程或上下文,並且對test.aspx的任何引用都變爲null(設置label1.text =「something」將生成空引用,但方法1(不調用)的直接調用將更新label1.text就好了。

有沒有什麼解決辦法嗎?誰能給我一些建議嗎?

+0

究竟你難道不能硬編碼?方法字符串或方法調用自己? –

+0

我能找到的唯一解決方案是調用一個方法,該方法返回一個對象並將該對象用作數據源與test.aspx進行交互,但由於所有方法都已經在test.aspx.vb中,因此它會更簡單我可以簡單地在這些方法中與test.aspx進行交互。 – David

+0

我需要找到一種方法來避免選擇的情況下(或如果語句)調用?方法。我有一個字符串,其中包含需要調用的方法的名稱,在完美的世界中,我會簡單地執行諸如excecuteMethod(StringWithMethodName) – David

回答

1
Dim xAssembly As Assembly = Assembly.GetExecutingAssembly() 

    Dim xClass As Object = xAssembly.CreateInstance("Paradox.Intranet2.ManageUsers", False, BindingFlags.ExactBinding, Nothing, New Object() {}, Nothing, Nothing) 
    Dim xMethod As MethodInfo = xAssembly.GetType("Paradox.Intranet2.ManageUsers").GetMethod("TestCallFromString") 

    Dim ret As Object = xMethod.Invoke(Me, New Object() {}) 
1

您需要通過測試的實例到Invoke方法頁(所以你調用它on the object)。對不起,C#代碼;-)

MethodInfo method = typeof(TestPage).GetMethod(StringContainingTheNameOfTheDesiredMethod); 
method.Invoke(this, null); 
+0

這幫了我,謝謝。 – David

+1

很高興聽到這個消息 - 請問您能接受答案嗎? –

+0

嗯,它幫助我找到答案,但它不是確切的答案......所以我提出了你的評論和答案。 – David

相關問題