在搭建完dnn的开发环境以后,就可以开始模块的开发了.以visual studio2005为例,模块开发主要有以下几步:
1.创建模块
基本上我们是通过在dnn解决方案中“E:/webroot/dnndemo(http://localhost/dnn)->添加新项->我的模板-> DotNetNuke Dynamic Module”,输入模块名称“DnnTestModule”并选择开发语言后点击确定,dnn会自动生成模块文件。虽然dnn的核心代码是使用VB编写,但在进行模块开发时我们可以自由选择.net开发语言(即可以使用C#开发)。
Dnn自动生成的模块文件包括两部分,即DesktopModules及App_Code两个目录下的ModuleName文件夹(即使刚才模块命名为DnnTestModule,DesktopModules和App_Code两个文件夹下新添加的模块初始文件名都是ModuleName),我们根据给出的提示:
Due to limitations in the templating capabilities of Visual Studio, you will need to manually rename a couple of folders before you continue.
Rename /App_Code/ModuleName to /App_Code/ DnnTestModule
Rename /DesktopModules/ModuleName to /DesktopModules/DnnTestModule
This can be accomplished in your development environment by right-clicking the folder name in the Solutions Explorer and selecting Rename from the menu.
In addition, as the main project uses Visual Basic you need to add a <codeSubDirectories> node to your web.config as shown below:
<codeSubDirectories>
<add directoryName="DnnTestModule" />
</codeSubDirectories>
This node is in the <system.web><compilation> node, and there is a commented out example in release.config.
(如果选择使用C#进行模块开发,需要在Web.config中的<codesubDirectories>字节中添加<add directoryName=”模块名”>字段进行注册,否则编译时会出错.)
修改模块文件夹名后生成的文件结构如下:
App_Code目录:
http://hi.csdn.net/space.php?uid=1923263&do=album&picid=494994
DesktopModules目录:
http://hi.csdn.net/space-1923263-do-album-picid-494995.html
说明:虽然部分资料建议手动创建以上文件目录结构,但由于模块本身在系统中的交互问题,仍然建议通过添加项的方式创建模块,再根据需要手动添加文件。
2.执行数据库脚本
我们将01.00.00.SqlDataProvider的脚本拷贝到“HOST->SQL”执行。
具体方法参考前一篇博客:DNN中手动插入01.00.00.SqlDataProvider脚本错误的问题
3.模块的注册于开发
在书写代码之前,为了方便调试,我们需要先在dnn中对模块进行注册。
在"模块定义"页面中选择"增加新定义"一项,然后开始创建模块定义,即Host->Module Definition->Create New Module
如图:http://hi.csdn.net/space-1923263-do-album-picid-494998-goto-down.html
首先需要填写模块相关的信息,名称等可以自由填写,但目录名(Folder Name)一栏必须与定义的模块目录名(DnnTestModule)一致。点击创建后增加一个新的定义(Add Definition-> Create Definition);最后在增加控制中添加控件即可。
如图:http://hi.csdn.net/space-1923263-do-album-picid-491299-goto-down.html
添加控件时需要注意的是view控件的key一栏中必须置空,类型必须为view;edit控件的key为edit,类型必须为edit;settings控件的key必须为settings,类型必须为admin;一个模块中可以有多个edit控件,但在注册时必须注册为不同的key。
如图:http://hi.csdn.net/space-1923263-do-album-picid-491588-goto-up.html
控件添加完成后就可以在页面上添加模块了。在vs2008环境下对模块代码进行修改保存后,不用重新调试,只需要刷新页面就可以看到模块的变化.
至于模块的开发,由于是使用ascx文件,所以开发方式和普通的用户自定义控件开发流程没有太大区别.但需要注意,由于dnn的布局方式与普通的aspx文件有所不同,因此在ascx文件中添加控件时不能以网格布局方式放置控件,必须以流布局的方式放置,否则页面显示会混乱;此外由于dnn是通过tabid来进行页面的跳转控制,因此在页面跳转时不能以普通的方式跳转;以下列出几个跳转语句:
从view页面跳转到edit页面:Respons.Redirect(EditUrl());
多Edit页面的情况下:Respons.Redirect(EditUrl(“edit的key值”));
从edit页面跳转到view页面:Respons.Redirect(Globals.NavigateURL(),true);
向edit页面传值:Response.Redirect(EditUrl("", "", "", "ID="+值));
edit页面获取值:Request.Params["ID"];
可参考:http://www.adefwebserver.com/DotNetNukeHELP/DNN4_ModuleDevelopersGuide/