【发布时间】:2014-02-15 22:05:14
【问题描述】:
我刚刚在 ASP.NET 中发现了一个非常晦涩的功能,它允许将控件映射到另一个控件。如果您没有控件的源,但您希望将其替换为对源的影响最小的自定义控件,这将非常有用。本质上,它就像一个 ControlAdapter 一样工作,只是整个类型被重新映射到另一种类型。你只需要修改你的 web.config 文件:
<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 吓坏了,声称它无法加载该类型。
【问题讨论】:
标签: asp.net webforms user-controls