IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> ASP.NET Core 3.1 VolCore框架自定义Dto(ViewModel) -> 正文阅读

[开发工具]ASP.NET Core 3.1 VolCore框架自定义Dto(ViewModel)

很多小伙伴使用volcore快速开框架的时候,代码生成器会给定义好了返回的数据。返回数据是PageGridData<T>,其中T就是实体model,没有做任何转化。于是乎有些小伙伴会overridePageGridData<TDto>,这种方式,结果发现编译通不过。

一、编译通不过原因

volcore采用partial同名类编译的方式来进行代码生成的,这种方式的好处就是,你重新代码生成的时候只会去改变另一个同名类,自己写的代码则可以保留下来。以Sys_UserService用户表为例,位于VOL.System.Services命名空间(文件夹)下,有Sys_UserService类(外层)和PartialSys_UserService(里层)。

外层Sys_UserService继承了实体类、业务接口和Autofac自动注入等。

public partial class Sys_UserService : ServiceBase<Sys_User, ISys_UserRepository>, ISys_UserService, IDependency
    {
        public Sys_UserService(ISys_UserRepository repository)
             : base(repository) 
        { 
           Init(repository);
        }
        public static ISys_UserService Instance
        {
           get { return AutofacContainerModule.GetService<ISys_UserService>(); }
        }
    }

里层Sys_UserService则是自定义接口,重写业务接口等。

因为同名partial类,所以编译的时候把这两个类合并编辑。因此overridePageGridData<Sys_User

Dto>,这种方式,编译通不过。只能使用override PageGridData<Sys_User>。

二、正确返回数据姿势

通过F12查看PageGridData查看类结构

public class PageGridData<T>
    {
        public int status { get; set; }
        public string msg { get; set; }
        public int total { get; set; }
        public List<T> rows { get; set; }
        public object summary { get; set; }
        /// <summary>
        /// 可以在返回前,再返回一些额外的数据,比如返回其他表的信息,前台找到查询后的方法取出来
        /// </summary>
        public object extra { get; set; }
    }

public object extra { get; set; }这就框架为我们提供的,可以在返回前,再返回一些额外的数据,比如返回其他表的信息,前台找到查询后的方法取出来。

后台修改

新建Sys_UserDto,作为Sys_User的自定义ViewModel。多一个IsOnline字段,显示用户是否在线。

public class Sys_UserDto:Sys_User
    {
        public string IsOnline { get; set; } 
    }

修改public override PageGridData<Sys_User> GetPageData(PageDataOptions pageData)方法,具体做法如下。

ublic override PageGridData<Sys_User> GetPageData(PageDataOptions pageData)
        {
            int roleId = -1;
            //树形菜单传查询角色下所有用户
            if (pageData.Value != null)
            {
                roleId = pageData.Value.ToString().GetInt();
            }
            QueryRelativeExpression = (IQueryable<Sys_User> queryable) =>
            {
                if (roleId <= 0)
                {
                    if (UserContext.Current.IsSuperAdmin) return queryable;
                    roleId = UserContext.Current.RoleId;
                }

                //查看用户时,只能看下自己角色下的所有用户
                List<int> roleIds = Sys_RoleService
                   .Instance
                   .GetAllChildrenRoleId(roleId);
                roleIds.Add(roleId);
                //判断查询的角色是否越权
                if (roleId != UserContext.Current.RoleId && !roleIds.Contains(roleId))
                {
                    roleId = -999;
                }
                return queryable.Where(x => roleIds.Contains(x.Role_Id));
            };
            base.OrderByExpression = x => new Dictionary<object, Core.Enums.QueryOrderBy>() {
                { x.CreateDate, Core.Enums.QueryOrderBy.Desc },
                { x.User_Id,Core.Enums.QueryOrderBy.Desc}
            };
            //前面的代码都不变
            //1获取已经处理好的gridData
            var gridData = base.GetPageData(pageData);
            //2将Sys_UserDto的数据赋值给gridData.extra
            gridData.extra = gridData.rows.Select(x => new Sys_UserDto
            {
                UserName = x.UserName,
                User_Id = x.User_Id,
                Gender = x.Gender,
                HeadImageUrl = x.HeadImageUrl,
                Dept_Id = x.Dept_Id,
                DeptName = x.DeptName,
                Role_Id = x.Role_Id,
                RoleName = x.RoleName,
                Token = x.Token,
                AppType = x.AppType,
                UserTrueName = x.UserTrueName,
                UserPwd = x.UserPwd,
                CreateDate = x.CreateDate,
                IsRegregisterPhone = x.IsRegregisterPhone,
                PhoneNo = x.PhoneNo,
                Tel = x.Tel,
                CreateID = x.CreateID,
                Creator = x.Creator,
                Enable = x.Enable,
                ModifyID = x.ModifyID,
                Modifier = x.Modifier,
                ModifyDate = x.ModifyDate,
                AuditStatus = x.AuditStatus,
                Auditor = x.Auditor,
                AuditDate = x.AuditDate,
                LastLoginDate = x.LastLoginDate,
                LastModifyPwdDate = x.LastModifyPwdDate,
                Address = x.Address,
                Mobile = x.Mobile,
                Email = x.Email,
                Remark = x.Remark,
                OrderNo = x.OrderNo,
                IsOnline = "离线"
            });
            //3、清空原来的gridData.rows数据
            gridData.rows = new List<Sys_User>();
            return gridData;
        }

前台修改

方式一:修改src\view\system\ Sys_User.vue文件,在const columns最后面添加字段。注意field要和Dto中的扩展字段一致。

{field:'IsOnline',title:'是否在线',type:'string',width:120,require:true,align:'left'}

这种方式如果使用代码生成器会被覆盖。

方式二(推荐):修改src\extension\systemSys_User.js文件

在onInit的时候this.columns.splice(5,0,{field:'IsOnline',title:'是否在线',type:'string',width:120,require:true,align:'left'}),这样就可以指定在第5个列的位置?加一行数据

修改src\extension\systemSys_User.js文件,在methods中添加searchAfter方法,改方法的意思就是添加数据表追加后台返回的extra中的数据。这就解释了后台使用了自定义Dto后,为什么要清空gridData.rows中的数据。如果不清空,表格中会渲染完全一样的两组数据,自定义Dto的数据被追加到代码生成器返回数据的下面。

searchAfter(rows,result){
            rows.push(...result.extra);
            return true;
        }

这样我们就完成了,自定义dto(viewmodel)。

效果

VolCore框架演示地址:vol3.0版本 (volcore.xyz)http://www.volcore.xyz/#/login源码地址:Vue.NetCore: .NetCore+Vue2/Vue3+Element plus+uniapp前后端分离,全自动生成PC与移动端代码;支持移动端(uniapp)ios/android/h5/微信小程序。http://www.volcore.xyz/ (gitee.com)https://gitee.com/x_discoverer/Vue.NetCorecq-panda/Vue.NetCore: .NetCore+Vue2/Vue3+Element plus+uniapp前后端分离,全自动生成代码;支持移动端(uniapp)ios/android/h5/微信小程序。http://www.volcore.xyz/ (github.com)https://github.com/cq-panda/Vue.NetCore官方学习视频:CCtalk 实时互动教育平台-专业的知识分享与在线教育平台https://www.cctalk.com/m/group/90268531?

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-05-18 17:51:32  更:2022-05-18 17:53:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/14 14:56:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码