介绍
本Demo是通过使用ASP.NET Zero创建一个电话簿的应用。本Demo会用到多租户,多语言,权限,配置,测试等模块。
创建工程
打开ASP.NET Zero项目,可以看到解决方案中包含了6个项目:
Nuget还原,数据库迁移完成后,运行并登录后可以看到以下界面:
现在注销。我们将应用改为单租户模式(后面将改为多租户)。所以,我们打开 XXXCoreModel 类,通过以下代码禁用多租户功能:
[DependsOn(typeof(AbpZeroCoreModule))]
public class PhoneBookCoreModule : AbpModule
{
public override void PreInitialize()
{
//Enable this line to create a multi-tenant application.
//Configuration.MultiTenancy.IsEnabled = true;
}
}
添加一个新页面
首先在首页添加一个“Phone book”的页面
定义菜单项
MpaNavigationProvider 类用来定义菜单,当我们改变这个类后,菜单将自动的改变。打开这个类并按下面代码那样添加一个菜单项
.AddItem(new MenuItemDefinition(
PageNames.App.Tenant.PhoneBook,
L("PhoneBook"),
url: "Mpa/PhoneBook",
icon: "glyphicon glyphicon-book"
)
)
每个菜单项都必须有一个唯一的名字作为标识。菜单名在PageNames类里面进行定义。我们添加一个叫“PhoneBook”的常量。
本地化菜单显示名
菜单项也应该有一个本地化的显示名,它用来在页面上显示菜单项。L(“PhoneBook”)就是用来本地化显示新菜单项的名字。L 是一个帮助方法,用来根据唯一标识来获取本地化字符串(见 MpaNavigationProvider 类)。
本地化字符串在.Core项目中的XML文件中定义,如下所示:
打开 AbpZeroTemplate.xml(默认语言,英语本地化配置)添加下面的代码:
<text name="PhoneBook" value="Phone book" />
如果我们没有定义”PhoneBook”的其他语言版本, 默认值将显示在所有语言版本中。我们可以在中文本地化配置文件AbpZeroTemplate-zh-CN.xml中添加以下代码:
<text name="PhoneBook" value="Phone book" />
其他菜单属性
url 是当我们点击菜单项后所需要跳转到的地址(这里是MVC Action)
最后,icon 是菜单项的图标。它可以是一个 css 类。我们可以使用Glyphicon, Font-Awesome或其他CSS 字体库。
见导航文档了解更多菜单定义。
创建页面
当我们创建完菜单项后,我们可以创建一个空页面。
Controller
在Web项目Areas/Mpa/Controllers文件夹下,创建PhoneBookController
public class PhoneBookController : AbpZeroTemplateControllerBase
{
// GET: Mpa/PhoneBook
public ActionResult Index()
{
return View();
}
}
我们PhoneBookController 的基类改为AbpZeroTemplateControllerBase,如果我们从Controller派生它也会正常运行,只是AbpZeroTemplateControllerBase提供了更多有用的属性和方法。所以,除非在你的案例中有其他不利的影响,我们总是从AbpZeroTemplateControllerBase进行派生。
View
在Areas/Mpa/Views/PhoneBook文件夹下创建一个空的View, Index.cshtml
@using MyCompanyName.AbpZeroTemplate.Web.Navigation
@{
ViewBag.CurrentPageName = PageNames.App.Tenant.PhoneBook;
}
<div class="row margin-bottom-5">
<div class="col-xs-12">
<div class="page-head">
<div class="page-title">
<h1>
<span>@L("PhoneBook")</span>
</h1>
</div>
</div>
</div>
</div>
<div class="portlet light">
<div class="portlet-body">
<p>电话薄内容</p>
</div>
</div>
ViewBag.CurrentPageName 设置为当前页面名字,当页面被激活后将会高亮显示。运行后如下图所示:
菜单的显示名字和标题都是本地化的。
注意:需要访问MPA的路径,localhost:6240/map/welcome