ABP虚拟文件系统(VirtualFileSystem)实例------定制菜单栏显示用
ABP默认的MVC启动模板在登录后,右上角显示的是用户名: 如果想让它显示用户的姓名该如何做呢?这就需要用到ABP一个非常强大的功能------虚拟文件系统. 前期准备使用ABP CLI创建一个名为 abp new AbpStudy 关于MVC的启动模板可以看文档,这里就不赘述. 虚拟文件系统(VirtualFileSystem)什么是虚拟文件系统(简称VFS)呢?来看一段官方文档的解释:
是不是还是不太明白VFS有什么用,没关系我第一次看完也是这样:) 我们首先要知道,ABP是一个模块化的框架,每个模块都可以互相协作参与到整个应用程序中,定制应用程序的各个部分,包括UI部分. 每个模块都可以有自己的UI,比如我有一个"人事管理"模块,它要向菜单中增加一个名为"人事管理"的菜单入口;而另一个模块"财务管理"则需要增加一个"财务管理"的菜单入口------在不修改你的应用程序的前提下要把它们整合在一起,这是一个很难的事,ABP的前身ASP.NET BOILERPLATE未能实现这点,而这一切在ABP中成为了可能. 而除了整合以外,模块间的文件同样也可以覆盖,只要文件的路径相同,VFS就允许你利用你自己的文件覆盖官方模块中的文件实现UI的定制,因为所有这些文件都是由VFS来进行管理,它们都是虚拟的! 覆盖如上图中MVC启动模板的外观,是一个叫 而右上角显示的用户名也是由它控制的,我们可以通过查阅ABP的源码,找到相关的代码是在 <a class="btn btn-link dropdown-toggle" href="#" role="button" id="dropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> @CurrentUser.UserName </a> 这里的 在我们的Web工程下,仿造路径结构建立一个
将原Default.cshtml中的全部代码直接复制过来,但是把其中渲染用户名的代码改成渲染姓名: @* 显示用户的名字,而不是用户名 *@ @((await UserManager.GetByIdAsync(CurrentUser.GetId())).Name) 这里我们使用了UserManager,通过当前登录用户的ID获取用户的信息,其中就包括了用户的姓名. 要使用 @inject IdentityUserManager UserManager 最后我们需要告知VFS,在Web工程中有文件需要加到VFS中. 修改 // 添加WebModule的文件到VFS Configure<virtualfilesystemoptions>(options => { options.FileSets.AddEmbedded<abpstudywebmodule>(typeof(AbpStudyWebModule).Namespace); });
OK,运行工程让我们看看效果: 我们在"个人信息"中将admin的名字设置为"WAKU",然后重新登录后右上角就会显示名字了. 再来一点魔法现在我们不要关闭应用程序,保持它在运行状态,然后回到我们添加的 <i class="fa fa-smile-o">@((await UserManager.GetByIdAsync(CurrentUser.GetId())).Name) </i> 我们使用复用fontawesome在名字前面增加了一个笑脸?图标,保存修改,回到浏览器按F5: 可以看到在未重新编译的情况下,我们的修改已经生效了! 很神奇吧? 这是因为为了方便开发,VFS设置了在开发阶段使用磁盘上的物理文件(Razor,js,css等),所以只要我们只要保存,不用重新编译刷新一下页面就会加载最新的文件,这会大大提升我们的开发效率! 而在发布后,则会使用编译后的程序集中的文件以提高运行效率. 尾声好了,到此为止我们已经完成了我们的目标------在菜单栏上显示用户的名字而不是用户名. 虽然从改动上来看只有很小的工作量,但在这背后是有很多值得学习的东西,ABP框架已经为我们做了很多!通过本文希望你能感受到ABP框架的强大,也希望ABP v1.0能早日发布! 示例工程放到GITHUB中了. 参考文章:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 将参数传递给Azure Active Directory身份验
- asp.net – COMException未知错误(0x80005000) – Director
- 如何在IIS上解决接近100%的CPU利用率
- asp.net – 为什么IIS线程这么珍贵与常规CLR线程相比?
- asp.net – System.Web.Security.FormsAuthentication.Encr
- 什么OverrideAuthenticationAttribute是为什么?
- asp.net-mvc – 如何使用RazorEngine从模板发送电子邮件
- asp.net-mvc – ASP.NET MVC – 查看多个模型
- 使用Asp.Net Identity 2在AspNetUserClaims中存储用户信息有
- asp.net-mvc – 返回修改后的viewModel进行查看
- asp.net-mvc – 处理MVC中的无效URL
- 如何在ASP.Net Web API中为特定控制器启用Window
- 没有更新过期的ASP.NET Cookie更新值?
- asp.net-mvc – 在TDD和DDD中,你如何处理假货中的
- asp.net-mvc – 如何在使用RedirectToAction时设
- C#_.net core 3.0自定义读取.csv文件数据_解决首
- asp.net-mvc – 为什么在安装MVC 4和工具时Visua
- asp.net-mvc – ASP.net MVC – FluentValidatio
- asp.net-mvc – 文件上传MVC
- asp.net-core – 删除继承的ASP.NET Core appset