看源代码,理解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)并且如何加载的吧?

目录
相关文章
|
4月前
|
机器学习/深度学习 数据可视化 PyTorch
PyTorch基础之模型保存与重载模块、可视化模块讲解(附源码)
PyTorch基础之模型保存与重载模块、可视化模块讲解(附源码)
46 1
|
4月前
|
机器学习/深度学习 传感器 算法
PyTorch基础之优化器模块、训练和测试模块讲解(附源码)
PyTorch基础之优化器模块、训练和测试模块讲解(附源码)
67 0
|
人工智能 数据可视化 TensorFlow
从Tensorflow模型文件中解析并显示网络结构图(CKPT模型篇)
从Tensorflow模型文件中解析并显示网络结构图(CKPT模型篇)
从Tensorflow模型文件中解析并显示网络结构图(CKPT模型篇)
|
10月前
|
机器学习/深度学习 PyTorch 算法框架/工具
Pytorch基础模块一模型(1)
Pytorch基础模块一模型(1)
|
算法 索引
Boost库学习笔记(二)算法模块-C++11标准
Boost库学习笔记(二)算法模块-C++11标准
207 0
|
存储 数据可视化 计算机视觉
目标检测的Tricks | 【Trick10】工具类文件调用(coco评价指标包、日志工具、Tensorboard工具...)
目标检测的Tricks | 【Trick10】工具类文件调用(coco评价指标包、日志工具、Tensorboard工具...)
558 0
目标检测的Tricks | 【Trick10】工具类文件调用(coco评价指标包、日志工具、Tensorboard工具...)
|
机器学习/深度学习 Python
自组织神经网络(SOM)的Python第三方库minisom源代码实现
自组织神经网络(SOM)的Python第三方库minisom源代码实现
|
机器学习/深度学习 Python
自组织神经网络(SOM)的Python第三方库minisom分类功能实现
自组织神经网络(SOM)的Python第三方库minisom分类功能实现
|
机器学习/深度学习 算法 Python
|
机器学习/深度学习 数据库 SQL