DNN建立独立模块开发项目 编译后丢失引用

这个问题已经困扰了我很久很久,一直没有解决。终于受不了,下定决心搞定它。

事情是这样,在我安装好DNN 的模版后,建立好项目, 见 利用vs独立开发DNN模块 。

首先注册Audit控件

<%@ Register TagPrefix="dnn" TagName="Audit" Src="~/controls/ModuleAuditControl.ascx" %>

调用



在注册了几个DNN的自带的UserControls后,错误出现在我的控件EditMyModule.ascx,编译就会报出下面的错误,。


Error 24 'System.Web.UI.UserControl' does not contain a definition for 'Text' and no extension method 'Text' accepting a first argument of type 'System.Web.UI.UserControl' could be found (are you missing a using directive or an assembly reference?) D:\Artur\dnn\installdnn\DotNetNuke_Community_05.01.00_Install\DesktopModules\MyModule\EditMyModule.ascx.cs 91 40 MyModule
Error 25 'System.Web.UI.UserControl' does not contain a definition for 'CreatedByUser' and no extension method 'CreatedByUser' accepting a first argument of type 'System.Web.UI.UserControl' could be found (are you missing a using directive or an assembly reference?) D:\Artur\dnn\installdnn\DotNetNuke_Community_05.01.00_Install\DesktopModules\MyModule\EditMyModule.ascx.cs 92 38 MyModule
Error 26 'System.Web.UI.UserControl' does not contain a definition for 'CreatedDate' and no extension method 'CreatedDate' accepting a first argument of type 'System.Web.UI.UserControl' could be found (are you missing a using directive or an assembly reference?) D:\Artur\dnn\installdnn\DotNetNuke_Community_05.01.00_Install\DesktopModules\MyModule\EditMyModule.ascx.cs 93 38 MyModule
Error 27 'System.Web.UI.UserControl' does not contain a definition for 'Text' and no extension method 'Text' accepting a first argument of type 'System.Web.UI.UserControl' could be found (are you missing a using directive or an assembly reference?) D:\Artur\dnn\installdnn\DotNetNuke_Community_05.01.00_Install\DesktopModules\MyModule\EditMyModule.ascx.cs 157 50 MyModule

问了下同事,这是由于在转换web应用程序(Convert to web application)时程序自动生成出错,直接在文件的相关的

EditMyModule.ascx.designer.cs文件中修改,先找到下面这段代码

protected global::System.Web.UI.UserControl ctlAudit;
修改成这样

protected global::DotNetNuke.UI.UserControls.ModuleAuditControl ctlAudit;
就可以了,其他的控件按照相应的修改

在DotNetNuke.UI.UserControls命名控件下有很多的控件,像ModuleAuditControl、TextEditor都在这里常用的控件 ,更多的相关介绍见园子里的DNN通用控件介绍上 DNN通用控件介绍下

但是后来发现这种方法有一种弊端,那就是改了一次下次还得改,只有你修改了EditMyModule.ascx控件中的代码 ,那么在EditMyModule.ascx.desiger.cs中中,那该死的错误又会出现了。

经过一段时间的摧残,实在是没办法了,要调试的次数多,改来改去,就浪费时间了。google之,在这里找到了。

好了,解决方法如下:

1.彻底删除EditMyModule.ascx.desiger.cs文件

2.在EditMyModule.ascx.cs源代码文件中手动声明相关的控件名字

protected DotNetNuke.UI.UserControls.TextEditor txtContent,MyTxtContent;
protected DotNetNuke.UI.UserControls.ModuleAuditControl ctlAudit,MyctlAudit;


3.右键EditMyModule.ascx 选择 Convert to web application

4.编译 succeeded

搞定收工!

DNN模块开发

学习DNN已经很长时间了,再不写点东西出来,就对不住自己了。话说DNN已经出来差不多6年了,该写的东西许多的前辈们基本都写完了,那我写什么呢?那就写模块的源代码剖析吧。模块开发,可以建立独立的项目来进行开发,这样主要是为了节约时间。详细见这里。一般情况下是用在VS2008中打开整个站点来开发模块,但是缺点是浪费时间,编译浪费时间。

建立好模块项目后,基本一个示例的东西都弄好了。就模块中的搜索功能以及导入、导出进行研究。

导出主要是由

代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> public string ExportModule(int ModuleID)
{

string strXML = "";

List colMyModules = GetMyModules(ModuleID);
if (colMyModules.Count != 0)
{
strXML += "";
foreach (MyModuleInfo objMyModule in colMyModules)
{
strXML += "";
strXML += "" + XmlUtils.XMLEncode(objMyModule.Content) + "";
strXML += "";
}
strXML += "";
}

return strXML;

}