我正在为一个客户端开发一些模块,这些模块将使用一个通用的 Web 用户控件来共享一些用户界面功能来提供 UI。当我编写第一个模块并添加到 .ascx 文件中时,一切都很好。当我将相同的控件添加到第二个模块时,我收到以下错误:
DotNetNuke.Services.Exceptions.ModuleLoadException:“XXX.ParametersControl.ParameterTabControl”类型不明确:它可能来自程序集“C:\Clients\XXX\Code\Reporting\DotNetNuke_BaseInstall\bin\XXX.KPI_Configurable_Chart.DLL”或程序集'C:\Clients\XXX\Code\Reporting\DotNetNuke_BaseInstall\bin\XXX.Survey_Grid.DLL'。请在类型名称中明确指定程序集。
没有这个额外的 UI 控件,这两个模块都可以正常安装和运行。
我将 UI 控件开发为一个单独的项目,该项目为包含的后端功能编译它自己的 DLL,然后在模块安装文件中仅使用已编译的 DLL 和控件 ASCX 文件部署应用程序。
包含到主模块 ASCX 是这样完成的:
<%@ Register src="ParameterControl/ParameterTabControl.ascx" tagname="ParameterTabControl" tagprefix="uc1" %>
正如你所看到的,我通过从一个子目录中获取接口控件来包含它,我将它实现为外部的 Subversion。
我在主模块的 .vb 代码隐藏中引用控件的对象和属性,如下所示:
ParameterTabControl1.DateRangeTabVisible = True
If (ParameterTabControl1.StartDate Is Nothing) Then
ParameterTabControl1.StartDate = DateAdd(DateInterval.Day, -90, Now)
End If
关于如何设计它以使其不会发生的任何提示?某种方式让子控件 ASCX 仅连接到它自己的 DLL 而不是绑定到主模块控件,同时仍然允许我查询控件上的属性和对象以设置和获取它的属性?