2014-02-15 60 views
0

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

MSDN documentation说:

的tagMapping元素定义 在编译时重新映射到其他标签类型标签类型的集合。此重新映射导致使用 映射类型代替所有页面 的原始标记类型以及 配置文件范围内的ASP.NET应用程序中的控件。

我能映射UserControl而不是标准控件,但我的替换UserControl不显示。

我意识到我指的是错误的类型。为了这个工作,我不得不引用ASPX类型名称,而不是它继承的类型。这可能是导致问题的原因,如果是这样,我该如何找到ascx的类型?

更新: 理查德为我提供了一个很好的线索来回答。不幸的是,我仍然留下两个问题:

首先,尽管Richard的ClassName建议为我的ascx提供了一致的名称,但我替换的其他控件并未使用该属性。我想避免与第三方代码混淆,我不知道它会有什么副作用。但是,如果在编译或执行环境中不更改,我可以使用ASP.NET生成的ClassName。

其次,由于这两个类型名称都是在运行时生成的,而不是编译时生成的,所以web.config怪胎声称它无法加载类型。

回答

0

在控件(.ascx)中使用@Control指令可用ClassName属性定义控件的类型名称。例如。

<%@ Control Language="VB" ClassName='MyNamespace.MyControl" %> 
+0

理查德,非常感谢您的帮助。看我的编辑。 –

+0

如果'.ascx'没有指定类型名称,那么编译'.ascx'时会生成一个。我怀疑(在运行时检查)这将不一致。如果它是第三方代码,则引发未指定的缺陷。 – Richard

+0

@ user148298:查看以前的评论(忘了把你的名字写进去。) – Richard

相关问题