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. python爬虫之scrapy的pipeline的使用

    scrapy的pipeline是一个非常重要的模块,主要作用是将return的items写入到数据库.文件等持久化模块,下面我们就简单的了解一下pipelines的用法. 案例一: items池 cl ...

  2. SQL Server2012中时间字段为DateTime和VarChar的区别

    在设计数据库的时候varchar类型是一个非常常见的类型,很多字段都可以使用这个类型,所以有时候在设计数据库的时候就很容易习惯性设计该类型,比如说时间类型,我们既可以DateTime类型,又可以使用v ...

  3. 莫烦theano学习自修第五天【定义神经层】

    1. 代码如下: #!/usr/bin/env python #! _*_ coding:UTF-8 _*_ import numpy as np import theano.tensor as T ...

  4. ubuntu 有些软件中不能输入中文

    如果Ubuntu设定的是英文语言,在各种软件例如wps等中很有可能就不能输入中文.这种情况,我们的解决方案是,把中文输入法加到软件的启动文件中,如何加呢?把下面内容加进去就可以解决: export X ...

  5. LODOP字体不识别 英文字母连起来 引号不正常

    打印超文本的时候,有时候会发现html中设置的css样式显示不正常,字体根本不是设置的字体,这种情况有可能是:1.该操作系统没有安装自己指定的那种字体,那么没有安装自然就不能显示设置的字体.2.该操作 ...

  6. Memcached 分布式集群

    首先解释一下我的标题,用到了 分布式 和 集群两个单词,为什么是集群?解决[相同业务]问题的服务器多个以上就称为集群.这里memcached就是做相同任务的(提供缓存服务)为什么是分布式?虽然针对的是 ...

  7. 创建一个UWP 打包签名

    Create a certificate for package signing 2017/2/8 3 min to read [ Updated for UWP apps on Windows 10 ...

  8. C语言学习IDE和基本程序结构

    任何一门语言的学习,首先要有一个编辑器或集成开发工具IDE, 要不然代码都不知道写到什么地方.对于我这种小白来说,安装个IDE是最好不过的,因为C 语言也是编译语言,写完代码之后,要先编译才能运行,而 ...

  9. hdu-1238(kmp+枚举)

    题意:给你n个字符串,问你这里面最长的公共子串的长度是多少,一个公共子串的反串也算,比如样例二: 解题思路:随便找一个字符,枚举它的子串然后跑kmp就行了,很多人的博客都是用string类里面的函数来 ...

  10. Java拦截器

    拦截器,主要用于拦截前端请求,常用于登录检查. 下面是演示使用拦截器拦截未登录的用户访问需要登录的模块情景,使用配置方式实现和注解方式实现代码: 配置方式: 1.web.xml中配置监听器,对于所有的 ...