看源代码,理解DNN模块
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)这个部分
你就能看到 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: EditUrl(),
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: EditUrl("MyWork"),
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)并且如何加载的吧?
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
2009-01-02 在线制作收藏夹ico图标的工具网站
2009-01-02 3D Tag Cloud
2009-01-02 AboutDNN网站链接交换图标