2010-07-02 51 views
1

我有一個非常簡單的設置,單mycontrol.ascx與assotheicated mycontrol.ascx.designer.vb和mycontrol.ascx.vb文件。ASP.NET - ascx.designer'屬性'在運行時沒有出現在反射中

mycontrol.ascx嵌入一個參考自定義控件: 「MyMenu菜單」:

<mM:myMenu id="myMenu1" runat="server" /> 

這已經創造了mycontrol.ascx.designer.vb文件保護的參考:

Protected WithEvents myMenu1 As Global.CustomControls.MyMenu 

現在,當我斷點mycontrol.ascx的Page_Load()事件並檢查從類型返回的成員時:

Me.GetType().GetMembers() 

我無法引用myMenu1。如果我看與intellisence控制,屬性是可訪問:

Me.myMenu1 

任何人都可以解釋正是我失蹤,我需要做的在運行時通過反射來訪問設計師創建的屬性是什麼?

乾杯

百勝餐飲。

回答

0

您的.acsx文件創建一個單獨的類(由編譯器生成),它繼承了代碼隱藏類。

GetMembers僅返回直接在類上定義的成員,而不返回從其基類繼承的任何成員。

你需要得到在基類中定義的成員,像這樣:

Me.GetType().BaseType.GetMembers() 
+0

好的特性,我已經試過,但它仍然沒有顯示在mycontrol.ascx.designer定義的myMenu1控制。 vb文件。 – Yumbelie 2010-07-02 14:44:22

+0

嘗試添加另一個'.BaseType' – SLaks 2010-07-02 17:21:38

0

什麼,我需要做的在運行時通過反射來訪問設計師創建的屬性?

我不知道你的菜單控件,但你不需要掌握用戶控件的成員,你需要去菜單控件的成員。

myMenu1.GetType().GetMembers() 

此外爲什麼使用反射?沒有你的自定義控制公開與您可以設置您的設置,例如

myMenu1.SelectedMenuItem = 3 
+0

我已經說明的問題基本上是我試圖解決的實際問題的昇華。簡而言之,我有一個.ascx控件,它作爲一個基礎,需要被派生到另一個.ascx中。雖然這種方法很簡單,但後面的代碼很簡單: 繼承BaseMenu 這同樣不適用於.ascx文件中定義的標記。從我讀過的,沒有辦法繼承標記,所以你必須將其複製到派生控件的.ascx中。 – Yumbelie 2010-07-02 14:53:18

+0

我設想了一個可能的解決方案,使用Page.ParseControl加載底層BaseMenu.ascx並將其添加到myControl.ascx。可以理解的是,由於編譯已經發生,設計器屬性並未實現,因此派生的控件佔位符(myMenu1)不會'粘貼'到.ascx控件實例。實際上,我想使用反射來手動將mycontrol.ascx.designer.vb屬性重新映射到通過ParseControl加載的.ascx控件實例。 – Yumbelie 2010-07-02 14:54:57

相關問題