看源代码,理解DNN模块

简介: Q:   我在VS2010里面创建的用户控件有多个,分别代表多个功能,例如:新闻管理下有添加新闻、新闻列表等两个控件,现在我在DNN中 创建了一个NewsManager的模块。又在DNN中创建了两个页面为NewsAdd.ASPX和Newslist.ASPX,然后分别在加入newsManager中, 我的问题是:为什么这个newsmanager模块只能显示其中一个newsadd.ASCX的控件,不能在两个页面显示不同的控件么,难道要每个用户控件 创建一个模块? A: 解决你这个问题首先你要正确的理解DNN里面的模块(Module)是如何工作的。

Q:

 

我在VS2010里面创建的用户控件有多个,分别代表多个功能,例如:新闻管理下有添加新闻、新闻列表等两个控件,现在我在DNN中

创建了一个NewsManager的模块。又在DNN中创建了两个页面为NewsAdd.ASPX和Newslist.ASPX,然后分别在加入newsManager中,

我的问题是:为什么这个newsmanager模块只能显示其中一个newsadd.ASCX的控件,不能在两个页面显示不同的控件么,难道要每个用户控件

创建一个模块?

A:

解决你这个问题首先你要正确的理解DNN里面的模块(Module)是如何工作的。

既然是开源软件,你就得学会如何看开源的代码解决你的问题。我这里以每一个DNN都会带有的HTML模块做类比回答你的问题。

HTML模块由两个功能,一个是 “Edit content”,一个是”My Work”,类比到你的例子上面就是做如下的比方:

Edit content

AddNews

My Work

ListNews

首先,你不需要两个页面来分别显示AddNews和ListNews,你只需要在一个页面里面加载AddNews或者ListNews。

你可以先看看HTML是如何在一个页面里面加载这个两个模块的。

Edit content

http://localhost:91/Home/tabid/56/ctl/Edit/mid/365/Default.aspx?popUp=true

My Work

http://localhost:91/Home/tabid/56/ctl/MyWork/mid/365/Default.aspx?popUp=true

你可以看到URL中大部分东西都是一样的,只有一样不同,那就是ctl的值不同,分别是ctl=Edit和ctl=MyWork.

这就是DNN用来制定加载哪个模块的方法。那这个值是在哪里指定的呢?这个其实是在.dnn文件里面指定的。你可以通过简单的方法查看一下。

你到Host->Extensions,点击HTML模块边上的小笔进入编辑状态。你找到模块定义(Module Definitions)这一节,你看模块控件(Module Controls)这个部分

clip_image002

你就能看到 HTML实际上上定义了三个Control. Control ID 分别是, Edit, MyWork, Settings.

要如何调用这几个Control,我们打开 HTML模块的源代码,找到”HtmlModule.ascx.cs”文件。找ModuleActionCollection属性。

找到这两部分:

   1:  // add the Edit Text action
   2:                  var Actions = new ModuleActionCollection();
   3:                  Actions.Add(GetNextActionID(),
   4:                              Localization.GetString(ModuleActionType.AddContent, LocalResourceFile),
   5:                              ModuleActionType.AddContent,
   6:                              "",
   7:                              "",
   8:                              
   9:                              false,
  10:                              SecurityAccessLevel.Edit,
  11:                              true,
  12:                              false);
   1:  // add mywork to action menu
   2:                  Actions.Add(GetNextActionID(),
   3:                              Localization.GetString("MyWork.Action", LocalResourceFile),
   4:                              "MyWork.Action",
   5:                              "",
   6:                              "view.gif",
   7:                              
   8:                              false,
   9:                              SecurityAccessLevel.Edit,
  10:                              true,
  11:                              false);

注意标识出的两个函数,这个两个函数就会生出对应的这两个Url。你也许会问问什么第一个函数不需要传参数呢?如果你想知道答案,你可以去看看那这个函数的源代码微笑.

EditUrl()

http://localhost:91/Home/tabid/56/ctl/Edit/mid/365/Default.aspx?popUp=true

EditUrl(“MyWork”)

http://localhost:91/Home/tabid/56/ctl/MyWork/mid/365/Default.aspx?popUp=true

到这里,你应该能大致明白DNN模块式如何组合各个控件(Control)并且如何加载的吧?

相关文章
|
机器学习/深度学习 算法 PyTorch
OpenCV-图像着色(采用DNN模块导入深度学习模型)
OpenCV-图像着色(采用DNN模块导入深度学习模型)
179 0
来自OpenCv的DNN模块助力图像分类任务
来自OpenCv的DNN模块助力图像分类任务
184 0
来自OpenCv的DNN模块助力图像分类任务
|
机器学习/深度学习 内存技术
DNN免费模块集锦
注:本贴还在更新中。 Text/HTML 整站内容替换模块 DNN Text/HTML Replacement Tool  站点计数器模块 Free Visitor Counter CounterXP  Google Analytics 模块 iFinity Google Analyt...
754 0
|
机器学习/深度学习
DNN永日新闻模块(YongRi)免费1.00.09版本下载
DNN上实现新闻发布国内模块很少,主要是使用永日新闻模块实现。最近不少人在寻找之前免费的1.00.09版本,为方便大家学习,我把这个模块传上来了。 下载链接:永日新闻模块1.00.09免费版本下载 此版本不支持图片新闻模板。
751 0
|
机器学习/深度学习
DNN中如何一次性插入多个模块
需求 有时候,我们要用几个模块才能实现某一组功能,比如Blog模块,我们需要一个模块用列表显示Blog条目,需要一个模块显示Blog内容,需要一个模块显示历史Blog发帖记录,需要一个模块显示搜索,所有这些模块要在同一页面上同时显示,所以也不能用控件(Control)实现,并且我们想要这些模块...
715 0
|
机器学习/深度学习 前端开发 .NET
如何在DNN模块中插入一个图片--在模块中引用资源文件
DNN永远都是运行在网站的根目录 DNN的设计上最大的特点就是始终是使用一个网站根目录下的Default.aspx文件加载皮肤和模块从而实现整个网站的页面。这也就是说DNN这个Asp.net程序永远是运行在DNN网站的根目录的,所有的资源文件(如:JS文件,图片,CSS)的引用都要从DNN网站的根目录算起。
822 0
|
机器学习/深度学习 数据格式 XML
模块DNN文件的版本记录和resource文件
做个笔记,就不详细讲了:  对模块的DNN XML 文件,有两个节点,一个是 ^[0-9]{1}[4-9]{1}.[0-9]{1}[6-9]{1}.[0-9]{1}[0-9]{1}$   这里可以用正则表达式指定模块兼容的版本,具体请参考:Minimum DotNetNuke Core Version Support 一个是: DNN_Announcements.
572 0
|
机器学习/深度学习
我下载了一个DNN模块的源码,如何加入我的DNN开发环境并编辑它?
下载源代码包 首先你需要得到模块的源代码包,对于DNN官方的模块,都会提供一个源代码包。对于非官方的模块,如果是开源的,也会提供一个源代码包。 比如Announcement模块:   对于代码包的区别,请参考这个: DNN Install包,DNN Source包和DNN StarterKit包之间有什么区别? 安装源码包: 安装源代码包和安装其它模块没有区别,正常安装就可以了,但要注意的一点是:官方的源代码包都会自动安装所有需要的源文件,但如果是第三方的源代码包,有时不能完全安装所有文件,这时你把源代码包解压缩后直接覆盖DesktopModules下的目录即可。
640 0
|
机器学习/深度学习
永日模块01.00.09不兼容DNN 4.3.7
近日发现永日01.00.09版本不兼容DNN 4.3.7, 表现是安装上去之后 show模块在管理员权限下正常现示但在普通权限下不能显示 show模块的“设置(Settings)”菜单不能显示永日自己的设置部份,这样也就无法给show模块指定显示"manager"模块里面那一部份的内容了 01.00.09在DNN 4.3.4下工作正常。
696 0
|
机器学习/深度学习
DNN4.3.3的版本开发的模块.没登陆DNN的情况下,按钮的事件有时候执行,有时候怎么点都不执行
Q:想问一下,我用DNN4.3.3的版本开发的模块. 为什么我在没登陆DNN的情况下,按钮的事件有时候执行,有时候怎么点都不执行啊. A:清空一下Cache就会正常
546 0