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中的函数参数
当是数组时候,是引用传递
-
java并发编程实战(java concurrency in practice)
第一章 线程共享进程范围内的资源,但每个线程都有各自的程序计数器.栈以及局部变量等. 多个线程可以同时调度到多个CPU上运行. 线程的优势? 在服务应用程序中,可以提升资源利用率以及系统吞吐率 ...
-
Thinking in Java——笔记(3)
Operator Using Java operators Some operators change the value of an operand. This is called a side e ...
-
简单shell脚本
简单shell脚本备忘 #!/bin/sh num= ] do table_num=`printf %03d ${num}` echo album_info_${table_num} #mys ...
-
分布式系统之CAP理论
任老师第一节主要讲了分布式系统实现时候面临的八个问题,布置的作业就是这个,查询CAP理论. 笔者初次接触分布式,所以本文主要是一个汇总. 一.CAP起源 CAP原本是一个猜想,2000年PODC大会的 ...
-
(hdu)5546 Ancient Go
Problem Description Yu Zhou likes to play Go with Su Lu. From the historical research, we found that ...
-
Nigix快速上手注意事项
linux下,主要关于配置,包括主从,待续......
-
c#高级语言编程(第一部分)
1.一步一步学c#(一):.NET体系结构 2.一步一步学c#(二):核心c# 3.一步一步学c#(三):对象和类型 4.一步一步学c#(四):继承 5.一步一步学c#(五):泛型 6.一步一步学c# ...
-
在调用相机后idleTimerDisabled失效的问题
在调用相机后idleTimerDisabled失效的问题 相关资料: http://*.com https://github.com/jamiemcd 问题 前几天有人在群里边 ...
-
delphi7 编译的程序在win7下请求获得管理员权限的方法
网上找到的,记下来方便查找,亲测此方法可用.附带把编译好的uac.res上传. 首先,用记事本新建一文本文档,内容如下: 1 24 UAC.manifest 然后另存为uac.rc 另外新建一文本档, ...