如何按类型名称引用ascx的类型?

时间:2014-02-15 22:05:14

标签: asp.net webforms user-controls

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

MSDN documentation说:

  

tagMapping元素定义了一组标记类型   在编译时重新映射到其他标记类型。这种重新映射导致了   用于代替所有页面的原始标记类型的映射类型   和ASP.NET应用程序范围内的控件   配置文件。

我可以映射UserControl而不是标准控件,但我的替换UserControl没有显示。

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

更新: 理查德为我提供了一个很好的答案。不幸的是,我仍然有两个问题:

首先,虽然Richard的ClassName建议为我的ascx提供了一致的名称,但我替换的另一个控件不使用该属性。我想避免弄乱第三方代码,我不知道它会产生什么副作用。但是,我可以使用ASP.NET生成的ClassName,前提是它在编译或执行环境中不会更改。

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

1 个答案:

答案 0 :(得分:0)

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

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