2010-06-03 61 views
18

我在ASP.NET頁面2的運行時間得到這個消息:使用用戶控制

頁「MyFolder中/ blabla.aspx」不能使用用戶控制「MyFolder文件/ MyControl.ascx ',因爲它在web.config中註冊並與頁面位於同一目錄中。

當然,我可以將它們分開到2個不同的文件夾,從而解決這個問題,但問題是:

WTF!?!?!爲什麼我不能把它們放在同一個文件夾中?! 爲什麼他們都不能......相處!?! :)

感謝

+0

有趣的是,我得到這個相同的確切的錯誤,我有一個包含另一個控件的控件。它甚至會說「The page'MyCONTROL.aspc'...」。 Page!=控制。所以我猜想在一個目錄中有多個控件是個問題。 – sparebytes 2012-05-23 20:46:14

回答

10

這一限制是設計由於內部設計考慮重新:性能。

有關更多信息,請參閱here

備註

的TagPrefixInfo類允許您以編程方式訪問和 修改存儲在配置文件中的標籤前綴信息。它 提供了與ASP.NET @Register 指令相同的功能。標記前綴將ASP.NET中的「命名空間」與 程序集和命名空間相關聯,這些命名空間必須包含在自定義控件 和用戶控件中才能正常工作。 TagPrefixInfo對象作爲TagPrefixCollection對象的成員存儲在 中。該 TagPrefixCollection類允許您以編程方式訪問 和修改控制款的頁面 配置文件的節。

TagPrefixInfo物體通過使用添加 元件以及指定用於沿着 的的TagPrefix屬性與其他相關屬性值的值添加到集合。其他需要 信息變化的基礎上的一種控制,你會與 指定標記前綴使用:

  • 如果它是一個用戶控件,你必須定義TagPrefixTagNameSource性能。
  • 如果是自定義控件,則必須定義TagPrefix,NamespaceAssembly屬性。如果控件位於應用程序代碼 目錄中,則不需要屬性Assembly 。同樣的tagPrefix值可用於映射到多個 程序集或名稱空間。

注意當指定源時,用戶控件本身不能與頁面位於同一目錄中。如果是這樣,當您嘗試加載頁面時,會出現運行時 錯誤。

2

我懷疑你可以不註冊它,如果它是必不可少的。 你可能有一個PlaceHolder,然後使用.Controls.Add(LoadControl(「path.ascx」))

但是,如果它不是必需的,然後把它放在不同的目錄由於@Barry說的原因。

6

如果您在頁面或用戶控件中註冊它而不是web.config,它將正確加載。 將以下內容添加到頁面的頂部。

<%@ Register TagPrefix="MyControlTagPrefix" TagName="MyControlTagName" Src="~/MyFolder/MyControl.ascx" %>