dnn8将支持使用ASP创建模块。NET MVC 5.1版(或更高版本)以及使用SPA(单页应用程序)模块使用HTML 5, JavaScript和ASP。NET Web API。在本系列之前的博客中,我已经描述了如何构建这些模块,并展示了如何处理本地化。还需要描述的一个主题是这两种方法如何注册模块操作,以便它们显示在DNN的模块操作菜单上。
ModuleAction属性
我将从如何为MVC模块注册模块动作开始。在Web表单的后台代码文件中,你可以通过实现IActionable接口来添加Module Actions。这种方法在MVC控制器中是不可能的,因为控制器可以有许多“视图”,每个视图都需要自己的一组模块动作。因此,我们决定添加一个新的ModuleAction属性,实现为MVC Action Filter。此属性允许您定义模块动作。
清单1:ModuleAction属性 |
1:(HttpGet)
2:[ModuleAction (ControlKey =“编辑”, TitleKey =“AddContact”)]
3:公共ActionResult指数()
4:{
5:var联系人= _repository.GetContacts(PortalSettings.PortalId);
6:
7:返回视图(contacts.ToList ());
8:}
|
每个ModuleAction属性将向Module Actions菜单中添加一个ModuleAction。在本例中,模块操作是“Edit”操作,其标题由本地化键“AddContact”定义。ModuleAction属性公开了以下属性:
- ControlKey -用于识别要加载的模块控件的键
- 图标-图标要使用的Url
- SecurityAccessLevel -安全访问级别设置
- 标题-显示在Actions菜单中的标题(文本)
- TitleKey -标题的本地化键(如果出现这个将覆盖标题设置)
每个ModuleAction属性定义一个ModuleAction。对于复杂的模块,这可能意味着Action方法可能有很多ModuleAction属性。此外,该属性只定义了ModuleAction属性的一个子集——它旨在提供一个简单的解决方案来覆盖80%的用例。为了涵盖更复杂的情况,我们还包含了ModuleActionItems属性。
ModuleActionItems属性
ModuleActionItems属性也被实现为一个动作过滤器。它有两个参数:
- 类型——类的类型(如果不存在,默认为当前控制器)
- MethodName -由Type参数定义的类中要调用的方法的名称。如果不显示,默认为“Get{actionmethods}Actions”,其中{ActionMethod}是应用属性的动作方法的名称。
作为一个例子,让我们用ModuleActionItems属性替换清单1中的单个ModuleAction属性。代码更改如清单2所示。
清单2:ModuleActionItems属性 |
1:(ModuleActionItems)
2:公共ActionResult指数()
3:{
4:var联系人= _repository.GetContacts(PortalSettings.PortalId);
5:
6:返回视图(contacts.ToList ());
7:}
8:
9:私人ModuleActionCollection GetIndexActions ()
10:{
11:var行动=新ModuleActionCollection ();
12:
13:行动。Add (新ModuleAction (1)
14:{
15:CommandName = ModuleActionType。AddContent,
16:commandcommandment =字符串。空的,
17:图标=字符串。空的,
18:标题= LocalizeString(“AddContact”),
19:Url = ModuleContext。EditUrl (“编辑”),
20:Secure = SecurityAccessLevel。编辑,
21:UseActionEvent =假,
22:可见=真正的,
23:NewWindow =假
24:});
25:
26日:返回行动;
27日:}
|
本质上,ModuelActions属性就像IActionable一样,返回模块操作的集合。
模块SPA模块中的动作
SPA模块的原则之一是使用单页应用程序样式构建它们。这本质上意味着模块不需要任何模块操作来加载第二个“页面”。但是为了完整性,我们添加了一个ModuleAction令牌。ModuleAction令牌的工作方式类似于我在前面描述的其他基于JSON的令牌博客,它的工作方式类似于ModuleAction属性,暴露了相同的参数集。
- controlKey
- 图标
- securityAccessLevel
- 标题
- titleKey
它还添加了一个额外的参数,以便您可以为titleKey字段标识“localResourceFile”。例如,上面使用的Edit ModuleAction的令牌是:
[ModuleAction: {controlKey: " Edit ", securityAccessLevel: " Edit ", titleKey: " AddContent ", localResourceFile: " ~/DesktopModules/Dnn/ContactList/App_LocalResources/ContactList.]resx“})
所以现在你可以将模块动作添加到你的MVC或SPA模块中——享受这种新的开发风格,并让我们知道你的想法。
欲了解更多信息