Dnn模块开发步骤杂谈

 我是最近才开始学习dnn的,接到的第一个任务就是开发dnn的模块。最近有朋友问我开发的步骤,我想还是把它写在blog上,一方面为了共享资源,一方面是希望能够得到dnn开发高手的指点。

在模块的开发上,我采用的方案:
界面层和代码层完全分开。

至于采用这个方案,对我来说并不是偶然的,因为我之前从来没有做过asp或是asp.net的开发,所以我对asp.net的界面表示层不感兴趣。所以我将模块的执行代码放到了另外一个工程中。不过这一点还是要得益于asp.net的框架,如果是在asp下面,这种开发模式是不可能的。

由于我的文字功底很差劲,所以,有表达不清楚的地方,大家可以用qq,msn或是email交流。


首先,打开工程模板,创建建一个dnn站点(图1),说明一下,由于我演示的是一个已经建好的dnn站点,所以多了一个DesktopModules文件夹,在最开始创建站点的时候,这个文件夹是不存在的,这个文件夹就是用来存放DNN Module的文件夹。

图1

然后,通过工程向导,添加Dnn模块,在这里,我选择的是C#,因为我个人比较喜欢用C#。在这里我创建一个Request模块图2

图2

当模块添加之后,你要将模块所在的文件夹名称改为模块名称,即将ModuleName改为Request。图3

图3

在这里一个模块的添加就算完成了,但是如果要将模块的执行代码放到另外一个工程中,我们还要做一些工作。



在这里,我另外新建一个class library工程,叫做HGG.Request。我这样命名只是为了项目管理,在技术上没有其它什么意思。图4,图5,由于显示的原因,我把图片分成了两截。

图4


图5

大家可以发现,每个页面对应的cs文件被移到了HGG.Request工程中,除此之外,还有数据处理文件也被移动到了这个里面。

那么这两个工程是如何关联起来的呢,以EditRequest.aspx文件为例,在最初由工程向导生成这个文件的时候,代码是这样的:
<%@ Control language="C#" Inherits="YourCompany.Modules.Request.EditRequest" CodeFile="EditRequest.ascx.cs" AutoEventWireup="true"%>

而当我把执行代码放到HGG.Request工程中后,我必须对上面的这段代码做如下调整:
<%@ Control Language="C#" Inherits="HGG.Modules.Request.EditRequest" AutoEventWireup="false"
    Explicit="True" %>

最关键的变化是删除了CodeFile设置,修改了Inherits设置。简单的说,HGG.Modules.Request.EditRequest就是在HGG.Request工程中,处理EditRequest.aspx的类,这个类名称叫EditRequest,名称空间为HGG.Modules.Request。

做完了上面的这一步,我们基本上就完成了表现层和代码层的分离工作。下面的问题是这两层如何通信。

关于这一点,asp.net做得非常的强,.net框架上有动态的事件绑定,这样的技术在asp.net中同样有效。

例如,在Request.aspx上有一个button:
<div style="float: left;">
                <asp:LinkButton ID="PreviousLink" runat="server" Text="Previous" CssClass="Normal" />
</div>
如果我们要处理它被点击后的事件,那么在HGG.Request工程中的Request.cs文件中,我们要做以下事情
1、在页面加载时,定义事件绑定:
//声明事件绑定
private void RegisterEvents()
        {
            SearchButton.Click += new EventHandler(SearchButton_Click);
            PreviousLink.Click += new EventHandler(PreviousLink_Click);
            NextLink.Click += new EventHandler(NextLink_Click);
            this.Load += new EventHandler(EditRequest_Load);
        }
//定义事件的处理代码
 private void PreviousLink_Click(object sender, EventArgs e)
        {
            MovePage(SegmentData, false);
        }

在这里,PreviousLink在这个类中,是一个属性,我通过这个属性来获取Request.aspx上PreviousLink的引用,在这里,HGG.Request中的Request类就和Dnn网站上的Request.aspx联系起来了。那么这个属性是如何定义的呢?下面是它的代码:
private LinkButton PreviousLink
        {
            get
            {
                return (LinkButton)FindControl("PreviousLink");
            }
        }
这就是关键。

其它的我想我这里就不必多说了,几乎一般的windows类库开发模式一样。

好了,这篇文章在这里就结束了,希望我说清楚了,不清楚的地方,欢迎讨论。
(最近我也在学习做dnn的皮肤)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明天好,会的

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值