参考文章:DotNetNuke高级编程4Chapter 12
开发环境:VS2008,DotNetNuke5.4.2_source,SqlServer express 2005
安装工具:DotNetNuke_Community_05.04.02_StarterKit.vsi
今天开始我的DotNetNuke模块开学的学习首先从HelloWorld模块开始,之前从john的视频教程中练习过HelloWorld模块的开发,今天使用StarterKit进行操作。打开DotNetNuke5.4.2_source的解决方案,如下图所示
我们在http://localhost/DotNetNuke_Community/->右键->添加新项,然后在“我的模板”中选择DotNetNuke Dynamic Module。如下图所示。
这时候,Web浏览器汇总会加载一个文档,详细解释所需执行的各个步骤,将ModuleName文件夹重命名与模块名称HelloWorld一致。这样就可以确保在位门户网站开发额外的模块时候不会出现命名冲突。该修改的包括以下三处。
1. /App_Code/ModuleName to /App_Code/HelloWorld
2. /DesktopModules/ModuleName to /DesktopModules/HelloWorld.
3. 以及web.config文件中做如下修改,这是为了对应app_code中添加的HelloWorld
<system.web>
<compilation>
<codeSubDirectories>
<add directoryName="HelloWorld" />
</codeSubDirectories>
</compilation>
</system.web>
创建模块部分已经完成,下面的工作是在DotNetNuke系统中注册HelloWorld模块。操作过程为:Host->ModuleDefinition,如下图所示。
创建模块有Crete Module From: New,control ,manifest。三种形式。
New:是创建一个全新的模块,即在DotNetNuke系统中创建,而不是在VS2008中创建。
Control:是创建指定的web control。
Manifest:是手动方式添加DNN模块的定义,这是在VS2008下已经创建了DNN模块的情况下。我们这里使用manifest,如下图所示。
但是添加模块的时候出现如下错误。
然后我在app_code下复制了HelloWorld文件夹并且重命名为YourCompany.HelloWorld。我们在StarterKit创建模块的时候将ModuleName重命名为HelloWorld,但是在HelloWorld.dnn文件中,我们会发现模块名都带有YourCompany。
去模块定义中查看HelloWorld模块,如下图所示:
我们会发现模块名带有YourCompany。模块的控件加载如下图所示。都是自动加载的。不需要手动加载。
我们在Home页面添加HelloWorld模块实例,结果如下错误
感觉是跟前面出现的那个YourCompany错误有关,所以做如下添加模块的测试。
添加Hello模块,并且直接将app_code文件夹和DesktopModule文件夹下的Hello改名为YourCompany.Hello。在web.config中也做了相应的修改,错误如下:
意思是找不到控件,我觉得是因为desktopmodule目录下Hello改名为YourCompany.Hello的缘故。所以将DesktopModule目录下的YourCompany.Hello改成Hello。出现如下错误:
这个错误表示dbo.YourCompany_Gethellos这个存储过程不存在。模块依然没有创建成功。
现在只修改web.config和app_code下加yourcompany,而desktopmodule下不加yourcompany测试一下。操作过程如下图所示。
但是加载模块出现如下错误。
和Hello模块出现的问题一样。都是找不到存储过程,因此我想到可能是没有执行sql脚本的缘故。然后我在host->sql下执行了01.00.00.SqlDataProvider脚本。
但是执行脚本出现如下错误。
不过这个错误只需要参照:DNN中手动插入01.00.00.SqlDataProvider脚本错误的问题就可以解决。解决错误以后再在Home页中添加模块,这会添加模块成功。
总结:
DNN模块的创建分为三个步骤:
1. 在vs2008下创建模块,在创建过程中,App_Code目录和web.config中都需要对模块名加上YourCompany,而DeskTopModule目录下的模块所在文件在不需要加YourCompany。
2. 在DotNetNuke系统中manifest方式注册模块
3. 执行01.00.00.SqlDataProvider脚本。