我需要從代表控件名稱的字符串中創建一個.NET控件(在ASP.NET中)。.NET按名稱動態獲取控件
Control myList = SomeSystemClass.GetControlByName("DropDownList");
我想在.NET平臺中有一些反射方法允許這個,但我不知道哪一個。有任何想法嗎?
我需要從代表控件名稱的字符串中創建一個.NET控件(在ASP.NET中)。.NET按名稱動態獲取控件
Control myList = SomeSystemClass.GetControlByName("DropDownList");
我想在.NET平臺中有一些反射方法允許這個,但我不知道哪一個。有任何想法嗎?
對於服務器控件:
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");
我認爲您需要將Type.GetType()
過載之一與Activator.CreateInstance
結合起來,才能創建出像您所描述的工廠方法。
相關的文檔:
編輯它只是發生,我認爲,如果你能使用的類型如代碼片段中所示投射,反射應該是絕對不必要的。如果您有能力將變量聲明爲DropDownList
,那麼只需簡單包含= new DropDownList();
並將其稱爲好就容易了。
編輯2有一段時間,可能正確直觀你的意圖的職位。如果您正在查找已存在的控件,並且您的命名容器(可能是頁面,或者可能是數據綁定控件)有句柄,那麼您可以使用FindControl
方法檢索控件,然後轉換爲相關類型。
您不能創建控制像這樣沒有'HttpContext'。最好解釋一下你的情況。 – 2010-08-18 14:37:17
如果是自定義(服務器)控件或用戶控件,也可以添加。 – 2010-08-18 14:45:15
這是一個ASP.NET服務器控件。 – asmo 2010-08-18 15:14:20