MVC控制器
概述
在一个Web表单模块,模块控制.ascx
用户控件,呈现在页面上。然而,在MVC模块,该模块是由MVC控制器动作方法返回一个MVC视图中,呈现在页面上。
操作方法
呈现一个MVC模块控制,款使用模块的控制源的定义。如果你的项目从MVC款模板,创建清单定义了一个默认的视图使用以下控制来源:
< moduleControl > < controlKey / > < controlSrc > Dnn.Modules.CompanyName.MyMvcModule.Controllers /项目/索引。mvc < / controlSrc >…< / moduleControl >
controlSrc
价值不是一个文件路径。在MVC模块中,使用指定的控制源格式:{控制器名称空间}/{控制器名称}控制器/{动作方法名称}.mvc
。上述控制源查找方法Index ()在课堂上Dnn.Modules.CompanyName.MyMvcModule.Controllers.ItemController,实现了抽象基类DotNetNuke.Web.Mvc.Framework.Controllers.DnnController。
例子:在以下代码,操作方法要求数据层(ItemManager)的所有条目对象列表模块实例。
公共类ItemController: DnnController{公共ActionResult指数(){var = ItemManager.Instance.GetItems项目(ModuleContext.ModuleId);返回视图(项目);}}
模型数据结果列表,然后传递给视图组件并返回。
模块操作菜单

模块的操作菜单可以定制你的MVC模块通过添加DotNetNuke.Web.Mvc.Framework.ActionFilters.ModuleActionAttribute默认视图的操作方法。
下面的代码片段是发现上面ItemController.Index ()方法在示例中提供的MVC项目模板。
[ModuleAction ControlKey = "编辑",TitleKey =“AddItem”)]公共ActionResult指数(){…}
ModuleActionAttribute属性包括以下:
- ControlKey。控制的关键模块的名称视图,用于指定调用控制器动作,当用户单击该菜单项。
- 图标。图像作为旁边的图标菜单项的文本。默认的是铅笔图标。
- SecurityAccessLevel。为了访问所需的访问级别的菜单项。的一个枚举值DotNetNuke.Security.SecurityAccessLevel。
- 标题。菜单项的文本。
- TitleKey。该菜单项关键。如果从资源获取的文本文件,用这个代替标题属性。在上面的例子中,预计资源命名
AddItem.Text
在Item.resx文件。
返回ActionResult
MVC控制器动作方法的主要目的是来填充视图与模型数据。动作方法的返回类型是一个抽象的System.Web.Mvc.ActionResult有许多可能的子类型,包括返回类型是两个最常用的一款MVC模块:ViewResult和RedirectToRouteResult。
ViewResult返回一个视图呈现命名的动作方法。RedirectToRouteResult重定向到另一个控制器动作。同样,DnnController.RedirectToDefaultRoute ()通常被称为重定向到缺省模块视图。
传递数据到视图
这两个结构通常用来传递数据的视图模型和ViewBag。
- 模型
的模型是一个“普通CLR对象”(略)。当使用您的模块的数据层,通常使用一个DAL2实体类模型。从template-generated代码,ItemManager是一个DAL2填充一个数据存储库班IEnumerable的列表项对象。列表传递给视图,剃刀代码生成的HTML代码。
公共ActionResult指数(){var = ItemManager.Instance.GetItems项目(ModuleContext.ModuleId);返回视图(项目);}
- ViewBag
MVC视图构建呈现特定的模型。有时,额外的数据传递给视图模型的范围之外是很有帮助的;例如,通过模块的相对路径,以避免硬编码样式表的视图。因为ViewBag允许动态属性,您可以定义一个新的动态属性(例如,ModulePath)的操作方法和使用属性视图。
例如:在ItemController.cs:
公共ActionResult指数(){var = ItemManager.Instance.GetItems项目(ModuleContext.ModuleId);ViewBag。”ModulePath = $ ~ / DesktopModules / MVC / {ModuleContext.Configuration.DesktopModule.FolderName}”;返回视图(项目);}
在Index.cshtml:
@ {ClientResourceManager.RegisterStyleSheet(款。DnnPage ViewBag。ModulePath+ "/Resources/bootstrap/css/bootstrap.min.css"); }