2015-01-14 59 views
0

我有一個ASP.NET 4網站(不是web應用程序)。從動態添加的用戶控件轉換並引用頁面時出錯

One one ASPX Page(Router.aspx)我根據請求的URL,在運行時動態地將ASCX用戶控件添加到佔位符。在用戶控件,我需要讓我用下面的代碼來引用頁面,從ASPX頁面檢索屬性:

Router myPage = (Router)Page; 

在Visual Studio這條線配備了紅色的波浪線和錯誤「的類型或命名空間名稱'路由器'找不到「。奇怪的是,當我在Web服務器上訪問這個頁面時,其中一個用戶控件(Home.ascx)可以正常工作,但是另一個(Product.ascx)則沒有。當它不起作用時,我收到編譯錯誤「CS0246:無法找到類型或命名空間名稱'Router'(是否缺少using指令或程序集引用?)」,上面的行顯示爲錯誤行。

即使我將所有代碼從Home.ascx/.cs複製到Product.ascx/.cs,Product.ascx仍然不起作用。

我很難過!

我猜測我引用ASPX頁面的方式不對,並且VS錯誤試圖告訴我一些東西。

注: 1)這是一個網站不是一個Web應用程序 2)在使用

+0

有了適當的架構,您的控件不需要知道頁面。該頁面應該連接到控件所公開的事件以交換信息。 – mason

+0

^總是必須有其中一條評論... – johna

+0

我不確定你的意思。如果你一直在設計遇到這些問題的奇怪架構,也許你應該把它當作一個標誌,並且重新考慮如何把它們放在一起。在這種情況下,控件應該是可以放置在頁面上的可重用組件,它們的行爲不應受到它所在頁面的影響。因此,暴露界面的方式是頁面可以利用的。 – mason

回答

0

從一些研究和實驗沒有命名空間,似乎因爲ASP.NET「網站的每個頁面「項目被編譯爲一個單獨的程序集,這意味着來自一個頁面的代碼無法從其他頁面或控件訪問。

但是,如果一個頁面使用母版頁,那麼該頁面可以從母版頁訪問代碼,儘管添加到頁面的用戶控件不能。

App_code文件夾中的代碼可供所有人使用。

我的問題的解決方案是在我的頁面繼承的App_code文件夾中創建一個基類,其中包含我需要用於用戶控件的所有方法和屬性。然後在我的用戶控件中,我可以將頁面作爲基類轉換並訪問這些方法和屬性。

相關問題