MVC控制器向视图传递数据包含多个实体类的解决方案有很多,这里主要针对视图模型、动态模型以及Tuple三种方法进行一些总结与记录。

基础集合类:TableA

namespace ViewModelStudy.Models
{public class TableA{public int A { get; set; }public int B { get; set; }public int C { get; set; }}
}

基础集合类:TableB

namespace ViewModelStudy.Models
{public class TableB{public int X { get; set; }public int Y { get; set; }public int Z { get; set; }}
}

构建分别以TableA,TableB为基础的集合

 public List<TableA> tableA(){var table = new List<TableA>(){new TableA{A=1,B=2,C=3},new TableA{A=4,B=5,C=6}};return table;}public List<TableB> tableB(){var table = new List<TableB>(){new TableB{X=1,Y=2,Z=3},new TableB{X=4,Y=5,Z=6}};return table;}

方法一:新建ViewModel向视图传递集合数据

using System.Collections.Generic;
namespace ViewModelStudy.Models
{public class ViewTable{public List<TableA> TableA { get; set; }public List<TableB> TableB { get; set; }}
}

 public ActionResult ViewModel(){var ViewTable = new ViewTable(){TableA = tableA(),TableB = tableB()};return View(ViewTable);}

@using ViewModelStudy.Models
@model ViewTable
@{Layout = null;
}<!DOCTYPE html><html>
<head><title>Index</title>
</head>
<body><div><table class="table1"><tbody>@foreach (var item in Model.TableA){<tr><td>@item.A</td><td>@item.B</td><td>@item.C</td></tr>}</tbody></table><table class="table2"><tbody>@foreach (var item in Model.TableB){<tr><td>@item.X</td><td>@item.Y</td><td>@item.Z</td></tr>}</tbody></table></div>
</body>
</html>

方法二:使用dynamic传递数据

        public ActionResult ExpandoObject(){dynamic table = new ExpandoObject();table.TableA = tableA();table.TableB = tableB();return View(table);}

@model dynamic
@{Layout = null;
}
<!DOCTYPE html>
<html>
<head><title>Test</title>
</head>
<body><div><table class="table1"><tbody>@foreach (var item in Model.TableA){<tr><td>@item.A</td><td>@item.B</td><td>@item.C</td></tr>}</tbody></table><table class="table2"><tbody>@foreach (var item in Model.TableB){<tr><td>@item.X</td><td>@item.Y</td><td>@item.Z</td></tr>}</tbody></table></div>
</body>
</html>

方法三:使用Tuple传递数据

        public ActionResult Tuple(){var table1 = tableA();var table2 = tableB();var TupleModel = new Tuple<List<TableA>, List<TableB>>(table1, table2);return View(TupleModel);}

@using ViewModelStudy.Models;
@model Tuple<List<TableA>,List<TableB>>
@{Layout = null;
}<!DOCTYPE html><html>
<head><title>Tuple</title>
</head>
<body><div><table class="table1"><tbody>@foreach (var item in Model.Item1){<tr><td>@item.A</td><td>@item.B</td><td>@item.C</td></tr>}</tbody></table><h1>xxxxxxxxxxxxxxxxxxx</h1><table class="table2"><tbody>@foreach (var item in Model.Item2){<tr><td>@item.X</td><td>@item.Y</td><td>@item.Z</td></tr>}</tbody></table></div>
</body>
</html>

总结

  使用新建视图模型优点在于对于较为复杂集合展示数据时,使用强类型能够较方便找到集合下面的实体属性,而缺点在于需要新建实体类,可能有相当一部分人都不喜欢新建实体类。

  使用动态类型和新疆视图模型相比,优势在于不需要新建实体类,想怎么命名就怎么命名,缺点也是由此而来,没法动态推断出集合下的实体类属性,可能对于集合属性比较复杂的页面来说单单敲出这些属性就是一个很大的问题。

  Tuple传递数据是我比较喜欢的一种方式,你只需要记住该集合中各部分数据的序号即可,而且对于实体类可以动态给出其包含的属性。

原文:http://www.cnblogs.com/fuxuyang/p/7988813.html

转载于:https://www.cnblogs.com/hnsongbiao/p/8728263.html

MVC控制器传递多个实体类集合到视图的方案总结相关推荐

  1. java 调用.net webservice axis2_java利用axis2调用.net写的webservice,传递自定义的实体类参数...

    利用axis2可以很方便的自动生成客户端代码,同时对复杂参数类型的传递也很方便,本文的服务端以.net开发,有一个自定义的实体类作为参数,客户端用java,简单介绍一下利用axis2的wsdl2jav ...

  2. java实体类间的转换_java 实体类集合转换和实体类转换

    1.首先要先创建一个函数式接口接口(@FunctionalInterface),回调方法 @FunctionalInterface public interface BeanCopyUtilCallB ...

  3. 关于spring MVC 绑定json字符串与实体类绑定

    1 如果前台传json字符串,后台用@RequestBody 接收 前端 "content-Type":"application/json", 2  前台用fo ...

  4. 工厂模式---实体类集合

    代码实现 tree entity/Product.h/cpp entity/Factory.h/cpp main.cpp // Product.h#ifndef UNTITLED3_PRODUCT_H ...

  5. java entity转dto_java 使用反射在dto和entity 实体类之间进行转换

    public class Utils { /** * 将dto和entity之间的属性互相转换,dto中属性一般为String等基本类型, * 但是entity中可能有复合主键等复杂类型,需要注意同名 ...

  6. 9.动态生成实体类,根据XML模板使用Emit生成动态类绑定到DataGrid

    在实际项目中,我们可能会遇到用户自定义XML模板字段,根据这个模板上的字段来显示相应的字段的值到DataGrid.在这种情况下,需要使用 XmlReader解析获取这个用户自定义的XML模板上有哪些字 ...

  7. jeecg-boot字典翻译改造(支持实体类详情查询自动翻译)

    找到字典切面类(DictAspect) 改造方法(parseDictText) 支持自动生成的列表接口/单个实体类查询翻译 代码如下: private void parseDictText(Objec ...

  8. JPA原生sql返回值转自定义实体类

    有两个月没更新过CSDN了,裸辞了,半个月前刚入职了新下家,这里适应下新公司的项目技术. 持久层用的是之前没用过的jpa,还好平时多多少少也有学过,上手也快. 用jpa写原生sql的时候,真的想骂人, ...

  9. JSON与实体类的转换

    json字符串转为实体类: 引用jar包:  com.alibaba.fastjson.JSONObject; Dept dept= JSONObject.parseObject(response, ...

最新文章

  1. 史上最坑爹的代码!个个让人崩溃!
  2. 树莓派4直接运行linux,树莓派4最小化安装Linux
  3. Java之toString()方法详解
  4. Java ArrayList set()方法与示例
  5. Java华丽转身 —— GUI编程宝典
  6. 【codevs2800】送外卖,状态压缩DP练习
  7. MySQL 函数积累
  8. 帆软报表 修改 加载中 文字
  9. using matlab drawing line graph for latex
  10. 参考资料:图片效果展示
  11. 甘特图 知乎_哪一款甘特图软件最好用?
  12. [bzoj2959][动态树]长跑
  13. html tooltips效果,div+css样式自制带小三角的tooltips效果
  14. 转换HLP文件到CHM格式
  15. Unity5.4 WWW频繁加载崩溃问题 Fatal signal 11 (SIGSEGV) at 0x00000004 (code=1)
  16. 计算机搜索功能关闭,提高电脑性能关闭Windows Search搜索功能设置技巧
  17. SpringBoot+ Dubbo + Mybatis + Nacos +Seata整合来实现Dubbo分布式事务
  18. .Net-C# 第一学期-第三章 上机练习+课后练习(简答题)
  19. GPS北斗卫星授时系统(NTP同步时钟设备)应用和发展
  20. html短信验证代码是什么意思,如何让验证码显示出来 在手机找到短信选项并进入...

热门文章

  1. java当数值超过byte时_java试题及答案
  2. C实现二叉树的先序遍历,中序遍历,后序遍历
  3. 智能型住宅自动控制与管理系统分析
  4. ajax技术实战-张晨光-专题视频课程
  5. 微信小程序之坦克大战学习
  6. python扫盲系列--(4)
  7. 协同过滤——基于邻域的算法
  8. spring boot创建一个应用
  9. Apache Doris : 一个开源 MPP 数据库的架构与实践
  10. 深度学习笔记4:深度神经网络的正则化