2010-08-18 74 views
2

我需要從代表控件名稱的字符串中創建一個.NET控件(在ASP.NET中)。.NET按名稱動態獲取控件

Control myList = SomeSystemClass.GetControlByName("DropDownList"); 

我想在.NET平臺中有一些反射方法允許這個,但我不知道哪一個。有任何想法嗎?

+0

您不能創建控制像這樣沒有'HttpContext'。最好解釋一下你的情況。 – 2010-08-18 14:37:17

+0

如果是自定義(服務器)控件或用戶控件,也可以添加。 – 2010-08-18 14:45:15

+0

這是一個ASP.NET服務器控件。 – asmo 2010-08-18 15:14:20

回答

1

對於服務器控件:

Control c = Page.ParseControl("<asp:DropDownList runat='server' />"); 

或者更具體地說爲您例如:

string ctrlName = "DropDownList"; 
Control c = Page.ParseControl("<asp:" + ctrlName + " runat='server' />"); 

用戶控件:

MyControl myControl1 = (MyControl)LoadControl("TempControl_Samples1.ascx"); 
1

我認爲您需要將Type.GetType()過載之一與Activator.CreateInstance結合起來,才能創建出像您所描述的工廠方法。

相關的文檔:

編輯它只是發生,我認爲,如果你能使用的類型如代碼片段中所示投射,反射應該是絕對不必要的。如果您有能力將變量聲明爲DropDownList,那麼只需簡單包含= new DropDownList();並將其稱爲好就容易了。

編輯2有一段時間,可能正確直觀你的意圖的職位。如果您正在查找已存在的控件,並且您的命名容器(可能是頁面,或者可能是數據綁定控件)有句柄,那麼您可以使用FindControl方法檢索控件,然後轉換爲相關類型。

相關的文檔:http://msdn.microsoft.com/en-us/library/486wc64h.aspx