如何在FineUIMvc(ASP.NET MVC)中显示复杂的表格列数据(列表和对象)?

起源

最初,这个问题是知识星球内的一个网友提出的,如何在FineUIMvc中展现复杂的列数据?

 

在FineUIPro中,我们都知道有一个 TemplateField 模板列可以使用,我们只需要在后台定义一个 C# 方法,就可以返回任意想要的数据。

可是在FineUIMvc中没有这么个列类型,那又如何展示复杂数据呢?

解决办法

先来看下数据模型:

public class Student
{[Key]public int Id { get; set; }[Required][Display(Name = "姓名")][StringLength(20)]public string Name { get; set; }[Required][Display(Name = "性别")]public int Gender { get; set; }[Required][Display(Name = "入学年份")]public int EntranceYear { get; set; }[Required][Display(Name = "是否在校")]public bool AtSchool { get; set; }[Required][Display(Name = "所学专业")][StringLength(200)]public string Major { get; set; }[Required][Display(Name = "分组")]public int Group { get; set; }[Display(Name = "注册日期")][DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}")]public DateTime? EntranceDate { get; set; }[Display(Name = "爱好")]public string[] Hobby { get; set; }[Display(Name = "家庭信息")]public Family Family { get; set; }}

通过一个静态方法获取模拟数据:

public class StudentHelper
{public static IEnumerable<Student> GetSimpleStudentList(){var students = new List<Student> { new Student {Id= 101,Name= "张萍萍",Gender= 0,EntranceYear= 2000,AtSchool= true,Major= "材料科学与工程系",Group = 1,EntranceDate= DateTime.Parse("2000-09-01"),Hobby = new string[]{"reading","basketball","travel"},Family = new Family {FatherName = "张国栋",MotherName = "李梅"}},new Student {Id= 102,Name= "陈飞",Gender= 1,EntranceYear= 2000,AtSchool= false,Major= "化学系",Group = 1,EntranceDate= DateTime.Parse("2001-09-01"),Hobby = new string[]{"reading","basketball"},Family = new Family {FatherName = "陈国梁",MotherName = "周兰"}},new Student {Id= 103,Name= "董婷婷",Gender= 0,EntranceYear= 2000,AtSchool= true,Major= "化学系",Group = 1,EntranceDate= DateTime.Parse("2008-09-01"),Hobby = new string[]{"reading","basketball","music"},Family = new Family {FatherName = "董辅仁",MotherName = "刘静"}},new Student {Id= 104,Name= "刘国",Gender= 1,EntranceYear= 2002,AtSchool= false,Major= "化学系",Group = 2,EntranceDate= DateTime.Parse("2002-09-01"),Hobby = new string[]{"reading","music"},Family = new Family {FatherName = "刘房龄",MotherName = "湘采荷"}},new Student {Id= 105,Name= "康颖颖",Gender= 0,EntranceYear= 2008,AtSchool= true,Major= "数学系",Group = 2,EntranceDate= DateTime.Parse("2008-09-01"),Hobby = new string[]{"travel","movie","music"},Family = new Family {FatherName = "康有为",MotherName = "陆小妹"}}};return students;}}

视图定义也很简单:

@(F.Grid().IsFluid(true).CssClass("blockpanel").Title("表格").ShowHeader(true).ShowBorder(true).ID("Grid1").DataIDField("Id").DataTextField("Name").Columns(F.RowNumberField(),F.RenderFieldFor(m => m.Name),F.RenderFieldFor(m => m.Gender).RendererFunction("renderGender").Width(80),F.RenderFieldFor(m => m.EntranceYear),F.RenderCheckFieldFor(m => m.AtSchool).RenderAsStaticField(true),F.RenderFieldFor(m => m.Major).RendererFunction("renderMajor").ExpandUnusedSpace(true),F.RenderFieldFor(m => m.Group).RendererFunction("renderGroup").Width(80),F.RenderFieldFor(m => m.EntranceDate)).DataSource(Model))

 

现在,我们希望能在表格中显示这个用户的爱好和家庭信息,最终的页面效果如图所示:

 

这里我们需要用到继承,从最初的模型类 Student 继承,因为这个继承类只在视图层用到,我们命名为 StudentViewModel:

public class StudentViewModel : Student
{[Display(Name = "爱好")]public string HobbyInfo{get{List<string> hobbyNames = new List<string>();foreach (var hobby in Hobby){var hobbyName = "";switch (hobby){case "reading":hobbyName = "读书";break;case "basketball":hobbyName = "篮球";break;case "travel":hobbyName = "旅游";break;case "movie":hobbyName = "电影";break;case "music":hobbyName = "音乐";break;}hobbyNames.Add(hobbyName);}return String.Join("", hobbyNames.ToArray());}}[Display(Name = "家庭信息")]public string FamilyInfo{get{return "父亲:" + Family.FatherName + ",母亲:" + Family.MotherName;}}}

可以看到,在这个继承的模型类中扩展了两个属性 HobbyInfo 和 FamilyInfo,其中定义了相应的业务逻辑。

获取数据时,需要转为相应的视图模型类:

public ActionResult Index()
{var students = new List<StudentViewModel>();foreach (var student in StudentHelper.GetSimpleStudentList()){students.Add(new StudentViewModel{Id = student.Id,Name = student.Name,Gender = student.Gender,EntranceYear = student.EntranceYear,AtSchool = student.AtSchool,Major = student.Major,Group = student.Group,EntranceDate = student.EntranceDate,Hobby = student.Hobby,Family = student.Family});}return View(students);
}

 

最后是,Razor视图定义:

@(F.Grid().ID("Grid1").IsFluid(true).CssClass("blockpanel").ShowBorder(true).ShowHeader(true).Title("表格").DataIDField("Id").DataTextField("Name").Columns(F.RenderFieldFor(m => m.Name),F.RenderFieldFor(m => m.Gender).RendererFunction("renderGender").Width(80),F.RenderFieldFor(m => m.EntranceYear),F.RenderCheckFieldFor(m => m.AtSchool).RenderAsStaticField(true),F.RenderFieldFor(m => m.Major).RendererFunction("renderMajor").Width(150),F.RenderFieldFor(m => m.FamilyInfo).Width(220),F.RenderFieldFor(m => m.HobbyInfo).ExpandUnusedSpace(true)).DataSource(Model))

 

搞定!

转载于:https://www.cnblogs.com/sanshi/p/9766823.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/413157.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

发一个自己写的抓包软件,支持插件化脚本分析

市场上的抓包工具已经足够多&#xff0c;轻量级的&#xff0c;重量级的都有&#xff0c;典型的wireshark&#xff0c;smartsniff等&#xff0c; 各有优缺点&#xff0c;PowerSniff是为程序员准备的一款抓包工具&#xff0c;目标是使协议解析插件编写更简单。文件格式完全兼容wi…

dropload.js无限刷新解决方案

1、检查Ajax是否设置了同步&#xff0c;将async设置为false&#xff0c;默认为true&#xff08;异步&#xff09; 2.检查是否进入了ajax的error方法&#xff0c;如果进入了error方法&#xff0c;按照官方给的demo&#xff0c;肯定会无限循环,所以在error方法加一句debugger进行…

javaWeb项目部署至tomcat下classes文件夹没有内容

解决方法&#xff1a;项目右键------Java Build Path----------Source 将Default output folder改成/src/main/webapp/WEB-INF/classes就可以了&#xff01;

第二次考核

https://gitee.com/sfr123/the_second_assessment/tree/master/SFR 7-1 学生类-构造函数 定义一个有关学生的Student类&#xff0c;内含类成员变量&#xff1a; String name、String sex、int age&#xff0c;所有的变量必须为私有(private)。 1.编写有参构造函数&#xff1a;…

马昕璐201771010118《面向对象程序设计(java)》第七周学习总结

第一部分&#xff1a;理论知识学习部分 Java用于控制可见性的4个访问权限修饰符&#xff1a; 1.private&#xff08;只有该类可以访问&#xff09; 2.protected&#xff08;该类及其子类的成员可以访问&#xff0c;同一个包中的类也可访问&#xff09; 3.public&#xff08;该类…

青蛙跳台阶算法

一、问题描述&#xff1a;一只青蛙一次可以跳上1级台阶&#xff0c;也可以跳上2级。求该青蛙跳上一个n级的台阶总共需要多少种跳法。 思路&#xff1a;首先考虑n等于0、1、2时的特殊情况&#xff0c;f(0) 0 f(1) 1 f(2) 2 其次&#xff0c;当n3时&#xff0c;青蛙的第一跳…

router+x

vue-router官方的路由管理器 包含的功能&#xff1a; ——绑定方法进行跳转 路由嵌套 写的不一样搜索的路由路径也不一样 二级路由 设置默认路由 导航守卫&#xff1a; 用于强制跳转或者取消的方式守卫导航。 例如&#xff1a;未登录页面的时候&#xff0c;不允许用户跳转到其他…

mybatis查询返回空,SQL数据库执行有数据!

我的数据库为Oracle&#xff0c;可以插入&#xff0c;更新&#xff0c;但在在Mybatis中执行SQL查询返回的数据发现返回NULL&#xff0c;但是生成SQL放在数据库中查询是有数据的&#xff0c;并且SQL是正确的&#xff01; 这是没有改动的XML: <select id"findAllByParen…

java EE : tomacat 基础

tomacat 目录结构 conf 配置文件 server.xml 转载于:https://www.cnblogs.com/Lumia1020/p/9802850.html

接口测试实例(jmeter)

Jmeter 安装说明 https://jingyan.baidu.com/article/acf728fd68e7bef8e510a3cb.html 1.从Apache Jmeter官网下载的版本&#xff08;需要Java版本是Java 8或以上&#xff09; 2.添加环境变量&#xff1a;jmeter的文件路径3.打开\bin\jmeter.bat&#xff0c;即可使用接口测试的一…

[HAOI2009]毛毛虫

题意描述 思路 [HAOI2009]毛毛虫树形DP最大毛毛虫可以看做以一个节点为根求它子树中节点及直接相邻节点个数最多的两条链用con[now]数组表示i的子树中跟i直接相连的点的个数(代码中的con[now]包括now自身)假设 树根now6,如图黄色部分 用num[now]表示以now为根的子树的链上及直接…

mysql触发器不起作用 navicat的bug?

如果想插入数据,先设置主键,再依次设置其他属性值的时候&#xff0c;在你输入完主键&#xff0c;navicat执行insert操作 当你输入其他的时候&#xff0c;语句就变成了update&#xff0c;当然这期间没有点保存。所以写的触发器就一直失效。这是一个插入后生效的触发器。(因为一…

windows环境下nginx的入门配置跳转tomcat

大家好&#xff0c;我是烤鸭&#xff1a;windows下配置nginx的目的就是要本地跟线上环境尽量保持一致。1. 下载官网下载地址 http://nginx.org/en/download.html我这里用的是nginx-1.13.0&#xff0c;看一下目录结构2. nginx关闭脚本 这里的nginx-killer就…

2018java基础面试题(我自己用的,面试好多家公司基本会问到的问题和技术)

1&#xff0c;webservice是什么&#xff1f; webservice是一种跨编程语言和跨操作系统的远程调用技术,遵循SOPA/WSDL规范。 2&#xff0c;springCloud是什么&#xff1f; springcloud是一个微服务框架&#xff0c;并提供全套分布式系统解决方案。支持配置管理&#xff0c;熔断机…

[css] 如果给一个元素设置background-color,它的颜色会填充哪些区域呢?

[css] 如果给一个元素设置background-color,它的颜色会填充哪些区域呢&#xff1f; 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

linux安装elasticsearch5.5

大家好&#xff0c;我是烤鸭: 我是采用官网下载tar包的方式安装的。 安装环境&#xff1a;centos 7.2,jdk1.8 下载地址: https://www.elastic.co/downloads/elasticsearch 1.解压缩&#xff1a; 解压 elasticsearch.5.5.2.tar.gz tar -zxvf elasticsearch-5.2.2.tar.gz2.创…

linux部署jenkins,tomcat9

大家好&#xff0c;我是烤鸭&#xff1a;今天分享的是 linux部署jenkins,tomcat9 安装环境&#xff1a;linux centos7.2tomcat 9.1Jenkins 2.73JDK 1.8maven 3.5git 2.91. 下载jenkins&#xff1a;https://jenkins.io/download/ 我选择的war下载。2. 安装…

jeesite的junit,数据没有插入?

jeesite框架自带的test方法 在common/test/SpringTransactionalContextTests.class 说一下遇到的问题。 sql执行成功了,但是数据库没有数据。what&#xff1f;&#xff1f;&#xff1f; 第一时间就想到了是事务的问题&#xff0c;事务没有提交。 RunWith(SpringJUnit4Class…

JAVA实现美团电影价格抓取(附代码)

各位老大好&#xff0c;我是烤鸭&#xff1a; 最近在研究爬虫,看到有意思的是美团的电影票价&#xff0c;普通的抓取是抓不到的。例如网址&#xff1a;http://bj.meituan.com/shop/105355906?mtt1.movie/cinemalist.0.0.j8oaf2un&#xff08;当你打开403或者404的话&#xff0…