MVC控制器传递多个实体类集合到视图的方案总结
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=,B=,C=},
new TableA{A=,B=,C=}
};
return table;
}
public List<TableB> tableB()
{
var table = new List<TableB>()
{
new TableB{X=,Y=,Z=},
new TableB{X=,Y=,Z=}
};
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
MVC控制器传递多个实体类集合到视图的方案总结的更多相关文章
- 多个module实体类集合打一个jar包并上传至远程库
本章内容主要分享多个module中的实体类集合生成到一个jar包中,并且发布到远程库:这里采用maven-assembly-plugin插件的功能来操作打包,内容不长却贴近实战切值得拥有,主要节点内容 ...
- .net mvc控制器传递方法到视图
很多人都是在视图里面定义方法,然后再使用.我个人也是这么干的.但是为了验证是否可以将方法从控制器传递到视图,所以做了个测试.结果真的可以.原理是利用了委托(delegate),因为委托本身就是一种类型 ...
- MVC控制器传递多个Model到视图,使用ViewData, ViewBag, 部分视图, TempData, ViewModel, Tuple
从控制器传递多个Model到视图,可以通过ViewData, ViewBag, PartialView, TempData, ViewModel,Tuple等,本篇逐一体验.本篇源码在github. ...
- 关于spring MVC 绑定json字符串与实体类绑定
1 如果前台传json字符串,后台用@RequestBody 接收 前端 "content-Type":"application/json", 2 前台用fo ...
- Spring Data JPA 多个实体类表联合视图查询
Spring Data JPA 查询数据库时,如果两个表有关联,那么就设个外键,在查询的时候用Specification创建Join 查询便可.但是只支持左连接,不支持右连接,虽说左右连接反过来就能实 ...
- C# MVC ( 将控制器的实体类注册到视图 )
(1)控制器 代码 using System; using System.Collections.Generic; using System.Linq; using System.Web; usin ...
- MVC控制器给View返回实体
前言 这几天把vs12更新到了vs12 5了,因为发现我之前装的12有问题,没有mvc,之后就从itellyou上下载了12的update5更新了一下.说实话,从开发到现在,自己只是平时自己玩用mvc ...
- ASP.NET没有魔法——ASP.NET MVC 与数据库之EF实体类与数据库结构
大家都知道在关系型数据库中每张表的每个字段都会有自己的属性,如:数据类型.长度.是否为空.主外键.索引以及表与表之间的关系.但对于C#编写的类来说,它的属性只有一个数据类型和类与类之间的关系,但是在M ...
- ASP.NET开发实战——(十三)ASP.NET MVC 与数据库之EF实体类与数据库结构
大家都知道在关系型数据库中每张表的每个字段都会有自己的属性,如:数据类型.长度.是否为空.主外键.索引以及表与表之间的关系.但对于C#编写的类来说,它的属性只有一个数据类型和类与类之间的关系,但是在M ...
随机推荐
- java中去除字符串(String)中的换行字符(\r \n \t)
例1: public class Test { public static void main(String[] args) { String s = "'sds gdasda" ...
- zepto的extend
类型判断 var class2type = {},toString = class2type.toString,$={}; //判断类型 function type(obj) { return obj ...
- hive自定义函数
- Redis的java客户端jedis
导包:Jedis需要的jar包 >Commons-pool-1.6.jar >Jedis-2.1.0.jar 配置:linux防火墙设置,不会设置就关闭. 停止防火墙 systemctl ...
- python之路--管道, 事件, 信号量, 进程池
一 . 管道 (了解) from multiprocessing import Process, Pipe def f1(conn): # 管道的recv 里面不用写数字 from_main_proc ...
- python 字符串常用操作方法
python 字符串常用操作方法 python 字符串操作常用操作,如字符串的替换.删除.截取.赋值.连接.比较.查找.分割等 1.去除空格 str.strip():删除字符串两边的指定字符,括号的写 ...
- AVL树,红黑树
AVL树 https://baike.baidu.com/item/AVL%E6%A0%91/10986648 在计算机科学中,AVL树是最先发明的自平衡二叉查找树.在AVL树中任何节点的两个子树的高 ...
- 学习android开发之路(一)页面布局
Android页面布局 1.Android页面布局一共分为6种: LinearLayout(线性布局).RelativeLayout(相对布局).TableLayout(表格布局).FrameLayo ...
- Recursive sequence HDU - 5950 (递推 矩阵快速幂优化)
题目链接 F[1] = a, F[2] = b, F[i] = 2 * F[i-2] + F[i-1] + i ^ 4, (i >= 3) 现在要求F[N] 类似于斐波那契数列的递推式子吧, 但 ...
- Let's Encrypt免费泛域名证书申请
一. 下载acme.sh,以下四条命令任选一条即可 curl https://get.acme.sh | shwget -O - https://get.acme.sh | sh curl https ...