我剛剛在ASP.NET中發現了一個非常模糊的功能,它允許將控件映射到另一個控件。如果您沒有控件的源代碼,但是您想用自定義控件替換它,並且對源代碼的影響最小,這可能非常有用。本質上,它像ControlAdapter一樣工作,除了整個類型被重新映射到另一個類型。你只需要修改你的web.config文件:如何通過類型名稱引用ascx的類型?
<pages>
<tagMapping>
<add
tagType=
"System.Web.UI.WebControls.WebParts.WebPartManager"
mappedTagType=
"Microsoft.Sharepoint.WebPartPartManager,
MSPS.Web.dll, Version='2.0.0.0'"
/>
</tagMapping>
</pages>
的tagMapping元素定義 在編譯時重新映射到其他標籤類型標籤類型的集合。此重新映射導致使用 映射類型代替所有頁面 的原始標記類型以及 配置文件範圍內的ASP.NET應用程序中的控件。
我能映射UserControl而不是標準控件,但我的替換UserControl不顯示。
我意識到我指的是錯誤的類型。爲了這個工作,我不得不引用ASPX類型名稱,而不是它繼承的類型。這可能是導致問題的原因,如果是這樣,我該如何找到ascx的類型?
更新: 理查德爲我提供了一個很好的線索來回答。不幸的是,我仍然留下兩個問題:
首先,儘管Richard的ClassName建議爲我的ascx提供了一致的名稱,但我替換的其他控件並未使用該屬性。我想避免與第三方代碼混淆,我不知道它會有什麼副作用。但是,如果在編譯或執行環境中不更改,我可以使用ASP.NET生成的ClassName。
其次,由於這兩個類型名稱都是在運行時生成的,而不是編譯時生成的,所以web.config怪胎聲稱它無法加載類型。
理查德,非常感謝您的幫助。看我的編輯。 –
如果'.ascx'沒有指定類型名稱,那麼編譯'.ascx'時會生成一個。我懷疑(在運行時檢查)這將不一致。如果它是第三方代碼,則引發未指定的缺陷。 – Richard
@ user148298:查看以前的評論(忘了把你的名字寫進去。) – Richard