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控制器传递多个实体类集合到视图的方案总结的更多相关文章

  1. 多个module实体类集合打一个jar包并上传至远程库

    本章内容主要分享多个module中的实体类集合生成到一个jar包中,并且发布到远程库:这里采用maven-assembly-plugin插件的功能来操作打包,内容不长却贴近实战切值得拥有,主要节点内容 ...

  2. .net mvc控制器传递方法到视图

    很多人都是在视图里面定义方法,然后再使用.我个人也是这么干的.但是为了验证是否可以将方法从控制器传递到视图,所以做了个测试.结果真的可以.原理是利用了委托(delegate),因为委托本身就是一种类型 ...

  3. MVC控制器传递多个Model到视图,使用ViewData, ViewBag, 部分视图, TempData, ViewModel, Tuple

    从控制器传递多个Model到视图,可以通过ViewData, ViewBag, PartialView, TempData, ViewModel,Tuple等,本篇逐一体验.本篇源码在github. ...

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

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

  5. Spring Data JPA 多个实体类表联合视图查询

    Spring Data JPA 查询数据库时,如果两个表有关联,那么就设个外键,在查询的时候用Specification创建Join 查询便可.但是只支持左连接,不支持右连接,虽说左右连接反过来就能实 ...

  6. C# MVC ( 将控制器的实体类注册到视图 )

    (1)控制器  代码 using System; using System.Collections.Generic; using System.Linq; using System.Web; usin ...

  7. MVC控制器给View返回实体

    前言 这几天把vs12更新到了vs12 5了,因为发现我之前装的12有问题,没有mvc,之后就从itellyou上下载了12的update5更新了一下.说实话,从开发到现在,自己只是平时自己玩用mvc ...

  8. ASP.NET没有魔法——ASP.NET MVC 与数据库之EF实体类与数据库结构

    大家都知道在关系型数据库中每张表的每个字段都会有自己的属性,如:数据类型.长度.是否为空.主外键.索引以及表与表之间的关系.但对于C#编写的类来说,它的属性只有一个数据类型和类与类之间的关系,但是在M ...

  9. ASP.NET开发实战——(十三)ASP.NET MVC 与数据库之EF实体类与数据库结构

    大家都知道在关系型数据库中每张表的每个字段都会有自己的属性,如:数据类型.长度.是否为空.主外键.索引以及表与表之间的关系.但对于C#编写的类来说,它的属性只有一个数据类型和类与类之间的关系,但是在M ...

随机推荐

  1. MyBatis全局配置文件的各项标签3

    mapper 将sql映射注册到全局配置中,这个我们在上一章已经使用过了, resource 这个属性是用来引用类路径下的sql映射文件 url 这个属性是用来引用网络路径或磁盘路径下的sql映射文件 ...

  2. python爬虫之scrapy文件下载

    我们在写普通脚本的时候,从一个网站拿到一个文件的下载url,然后下载,直接将数据写入文件或者保存下来,但是这个需要我们自己一点一点的写出来,而且反复利用率并不高,为了不重复造轮子,scrapy提供很流 ...

  3. h5简易手写板

    ............. 我该说点什么呢,开头居然不知道想说点什么!好吧不知道说什么,我们就来说说这个手写板吧,虽然这个手写板现在没什么用,但是.....,好像的确没什么用啊! 只是存粹哪里练手的的 ...

  4. CDH 6.0.1 集群搭建 「Before install」

    从这一篇文章开始会有三篇文章依次介绍集群搭建 「Before install」 「Process」 「After install」 继上一篇使用 docker 部署单机 CDH 的文章,当我们使用 d ...

  5. Python时间的简单使用

    1.time.strptime(string[, format]),string -- 时间字符串.format -- 格式化字符串.返回struct_time对象.     把字符串转换为时间格式, ...

  6. 老男孩python学习自修第八天【函数式编程】

    1.可变参数,将传参自动汇总成列表 2.可变参数,将参数自动汇总成字典 实战如下: #!/usr/bin/env python # _*_ coding:UTF-8 _*_ def show(*arg ...

  7. Python学习之路——Day06 元组

    一.元组 t1 = (1, 2) t2 = tuple((1, 2)) t3 = (1, ) # 索引 | 切片 | 长度 # .count(obj) | .index(obj, bIndex, eI ...

  8. Error:Failed to resolve: com.android.support:appcompat-v7

    repositories { maven { url "https://maven.google.com" } } implementation 'com.android.supp ...

  9. WebAPI MVC Change Identity Default Table

    看过之前的文章小伙伴们应该已经明白了,当我们新建一个带有身份验证的模板时,会自带Identity Server,并且它的表名和字段名也都是默认的. 那么该如何修改它,并让EF知道呢?不废话,直接上代码 ...

  10. Springboot学习问题记录

    1.spring boot与cloud构建微服务,返回数据从json变成了xml 问题:本身spingboot项目是用@RestController注解,返回结果也是json格式,但是结合spring ...