我刚刚在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