博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MVC控制器传递多个实体类集合到视图的方案总结
阅读量:5998 次
发布时间:2019-06-20

本文共 3831 字,大约阅读时间需要 12 分钟。

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() { var table = new List
() { new TableA{A=1,B=2,C=3}, new TableA{A=4,B=5,C=6} }; return table; } public List
tableB() { var table = new List
() { 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 { get; set; } public List
TableB { get; set; } }}
public ActionResult ViewModel()        {            var ViewTable = new ViewTable()            {                TableA = tableA(),                TableB = tableB()            };            return View(ViewTable);        }
@using ViewModelStudy.Models@model ViewTable@{    Layout = null;}    Index    
@foreach (var item in Model.TableA) {
}
@item.A @item.B @item.C
@foreach (var item in Model.TableB) {
}
@item.X @item.Y @item.Z

方法二:使用dynamic传递数据

public ActionResult ExpandoObject()        {            dynamic table = new ExpandoObject();            table.TableA = tableA();            table.TableB = tableB();            return View(table);        }
@model dynamic@{    Layout = null;}    Test    
@foreach (var item in Model.TableA) {
}
@item.A @item.B @item.C
@foreach (var item in Model.TableB) {
}
@item.X @item.Y @item.Z

方法三:使用Tuple传递数据

public ActionResult Tuple()        {            var table1 = tableA();            var table2 = tableB();            var TupleModel = new Tuple
, List
>(table1, table2); return View(TupleModel); }
@using ViewModelStudy.Models;@model Tuple
,List
>@{ Layout = null;}
Tuple
@foreach (var item in Model.Item1) {
}
@item.A @item.B @item.C

xxxxxxxxxxxxxxxxxxx

@foreach (var item in Model.Item2) {
}
@item.X @item.Y @item.Z

总结

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

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

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

 

转载于:https://www.cnblogs.com/fuxuyang/p/7988813.html

你可能感兴趣的文章
poj 3370 鸽笼原理知识小结
查看>>
linux kernel启动流程
查看>>
Python之控制台输入密码的方法
查看>>
.net下二进制序列化的格式分析[转]
查看>>
使用Hive的web界面:HWI
查看>>
C#学习笔记—控制台与消息框输出
查看>>
MVC单元测试,使用Repository模式、Ninject、Moq
查看>>
C#各种异常处理方式
查看>>
AngularJS中使用$http对MongoLab数据表进行增删改查
查看>>
推荐系统
查看>>
[MySQL]快速解决"is marked as crashed and should be repaired"故障
查看>>
(DT系列四)驱动加载中, 如何取得device tree中的属性
查看>>
游戏开发-技术
查看>>
cmake和make区别
查看>>
C#中标准Disp“.NET技术”ose模式的实现
查看>>
FastJson、Jackson、Gson进行Java对象转换Json的细节处理
查看>>
[转]Android中在SurfaceView上高效绘图
查看>>
flash 观察帧频率的工具 fps counter
查看>>
Quartz2D简单绘制之矩形&椭圆
查看>>
VIC流程
查看>>