我有一個Web站點項目,並在其中有一個用戶Web控件定義在一個ascx文件中。在.master控制類型中找不到子控件頁面中的Web控件
該控件被添加到Site.Master中,並且它在頁面上正確顯示並且一切正常。
我需要覆蓋派生自Site.Master的其中一個頁面上的某些控件的字段。
// In OnLoad:
MyControlName control = (MyControlName) Page.Master.GetBaseMasterPage().FindControl("controlID"));
問題是MyControlName未在子頁面上註冊爲有效類型。如果我直接向子頁面添加第二個控件實例,上面的工作將根據需要進行,但如果控件不是直接放在頁面上,而是僅在母版頁中定義,則該類型是未定義的。該控件不在名稱空間中,並在項目中定義,所以我不知道爲什麼它有這樣的問題位置適當的類型。
如果我在OnLoad中放置了一個斷點,那麼爲控件列出的類型是ASP.my_control_name_ascx,但使用它也不起作用。
爲什麼孩子類不能引用正確的類型?我能解決這個問題嗎?
謝謝!
是的,這是我們自己的功能。我們有一個網站的主人,和科大師。並非所有節主都必須從網站主控繼承,所以該功能只能運行到「最高」主頁面。 如果在頁面上放置了控件的第二個實例,則該代碼正常工作。即它將控件定位在主控件上並更新主控頁面控件的狀態,但只有當子頁面上有控件的實例時纔會這樣。否則,編譯器會說這是一個未知的類型。所以這只是一個類型解析問題,而不是功能問題。 – turtle 2010-06-07 17:59:13
關於該代碼示例的快速(迂腐)點;你需要支持Page.Master來獲取類型轉換:MyControlName control =((MyControlName)Page.Master).FindControl(「controlId」); – 2010-10-12 14:15:27
我不明白爲什麼,Page.Master是MasterPage類型的屬性,它繼承自Control,它具有FindControl方法。您只需要投射結果,這是FindControl方法的結果,您不需要進一步括號。 – 2010-10-12 14:54:04