使用MVC时,会遇到从Controller传递到View的数据只是某几个表中的几个字段的数据,有很多人都会想到能否把这几个字段组成一个匿名类传到View,但是这样好像行不通,所以有些时候我们会针对这几个字段来创建一个Model,方便数据的正确传递,但是这会使得Model越来越多,很多人都不喜欢这么做,那有没有其他方法解决这个问题呢?

这里给大家介绍一种方法:

使用System.Tuple来实现,该类是一个静态类,提供了一些用于创建元组对象的静态方法,这个就不多了,大家可以自己去查看下元数据就知道了,很简单的。

接下了看下使用方法:

Controller代码:

public ActionResult TupleTest()

{

LinqDBEntities db = new LinqDBEntities();

dynamic data = db.StuInfo.ToList().Select(s => Tuple.Create(s.StuNum, s.StuName, s.StuAge,s.StuSex, s.ClassID));

ViewData["data"] = data;

return View();

}

在Controller中把要传递的数据通过Tuple.Create封装数据

<%

dynamic dd = ViewData["data"];

foreach (var item in dd)

{

Response.Write(item.Item1+"-"+item.Item2+"-"+item.Item3+"-"+item.Item4+"-"+item.Item5+"<br>");

}

%>

在View中可以拿到封装的数据。

注意:Tuple.Create最多支持8个参数,但是有时候我们的字段不止8个,我们可以使用Tuple嵌套,例如:

Tuple.Create(s.StuNum, s.StuName, s.StuAge,s.StuSex, s.ClassID,s.StuNum,Tuple.Create(s.StuName,s.StuAge))

但是嵌套以后在,代码的清晰度就会降低,所以建议大家如果字段过多可以考虑创建专门的Model类

有时需要在ASP.Net MVC4的视图的@model中使用多个类型的实例,.NET Framework 4.0版本引入的System.Tuple类可以轻松满足这个需求。

假设Person和Product是两个类型,如下是控制器代码。

using System;

using System.Web.Mvc;

namespace Razor.Controllers

{

public class HomeController : Controller

{

Razor.Models.Product myProduct = new Models.Product { ProductID = 1, Name = "Book"};

Razor.Models.Person myPerson = new Models.Person { PersonID = "1", Name = "Jack" };

public ActionResult Index()

{

return View(Tuple.Create(myProduct,myPerson));  // 返回一个Tuple对象,Item1代表Product、Item2代表Person

}

}

}

如下是视图Index.cshtml的代码

@model Tuple<Razor.Models.Product, Razor.Models.Person>

@{

Layout = null;

}

<!DOCTYPE html>

<html>

<head>

<meta name="viewport" content="width=device-width" />

<title>Index</title>

</head>

<body>

<div>

@Model.Item1.Name

</div>

</body>

</html>

转载于:https://www.cnblogs.com/lgx5/p/5676405.html

MVC中使用Tuple完成匿名类数据存储相关推荐

  1. 使用ExposedObject对Asp.net MVC中匿名类型的JsonResult做单元测试

    返回JsonResult是MVC中的常见返回值类型,而且简单方便的方式是结合匿名类型一起使用. 比如: public ActionResult PreviewEmail() {--return Jso ...

  2. 如何使用 C# 中的 Tuple

    开局一张图,首先声明的是 Tuple 不是什么新鲜概念,在编程语言 F#,Python 中早就有这个了,Tuple 是一种 有序的,有限不可变的,支持混杂类型的固定个数的 一种数据结构,有些朋友可能就 ...

  3. 如何在 ASP.NET MVC 中集成 AngularJS(2)

    在如何在 ASP.NET MVC 中集成 AngularJS(1)中,我们介绍了 ASP.NET MVC 捆绑和压缩.应用程序版本自动刷新和工程构建等内容. 下面介绍如何在 ASP.NET MVC 中 ...

  4. ASP.NET MVC中controller和view相互传值的方式

    ASP.NET MVC中Controller向view传值的方式: ViewBag.ViewData.TempData 单个值的传递 Json 匿名类型 ExpandoObject Cookie Vi ...

  5. ASP.NET MVC教程五:ASP.NET MVC中的路由

    一.概述 在ASP.NET MVC架构中,控制器在3大核心构件中处于中心地位,通过控制器支配模型和视图,然而从浏览器发出的请求到控制器还需要路由的协助,路由将特定的请求和控制器的动作对应起来. 在AS ...

  6. 论MVVM伪框架结构和MVC中M的实现机制

    一直都有人撰文吹捧MVVM应用开发框架,文章把MVVM说的天花乱坠并且批评包括iOS和android所用的MVC经典框架.这篇文章就是想给那些捧臭脚的人们泼泼冷水,虽然有可能招致骂声一片,但是目的是给 ...

  7. 网址路由Routing组件如何在mvc中生成网址

    一.摘要 本篇文章从基础到深入的介绍ASP.NET MVC中的Routing组件. Routing翻译过来是"路由选择", 负责ASP.NET MVC的第一个工作:识别URL, 将 ...

  8. Asp.Net MVC中身份认证和授权

    MVC自带的ActionFilter 在Asp.Net WebForm的中要做到身份认证微软为我们提供了三种方式,其中最常用的就是我们的Form认证,需要配置相应的信息.例如下面的配置信息: < ...

  9. ASP.NET MVC中的身份验证

    传统的登录验证方式,是通过将用户的登录状态信息保存在服务端的Session中,再利用客户端浏览器的Cookie保存SessionID,这样浏览器每次在向服务端发起请求时,都会携带该Cookie值,服务 ...

  10. MVC 中的 ViewModel

    此文章总结自:http://rachelappel.com/use-viewmodels-to-manage-data-amp-organize-code-in-asp.net-mvc-applica ...

最新文章

  1. Spring Data JPA 常用注解
  2. 【Paper】2021_Consensus Control of Leader-Following Multi-Agent Systems in Directed Topology
  3. 人工机器:基于视觉的机械手控制
  4. 腾讯云云机安装dockers
  5. 吴孟达肝癌逝世:肝被透支的全过程曝光!
  6. web前端学习笔记(二)---Django
  7. YFI创始人旗下多链跨链平台multichain.xyz即将投入使用
  8. C#笔记(一):类型,泛型,集合
  9. 高级操作系统——XV6内存管理
  10. [免费专栏] ATTACK安全之Android ICMP隧道攻击原理与入侵检测实践
  11. 求最大公约数和最小公倍数的做法(Java实现)
  12. 欧创芯原装OC 6700B升压型恒流驱动芯片,智能过温保护,内置 VDD 稳压管
  13. sublime html代码自动排版,sublime Text3 如何自动排版代码
  14. ElasticSearch创建索引映射文档+IK分词器
  15. Emakefile--快速编译
  16. cydia java_利用Cydia Substrate进行Android JAVA HOOK
  17. 电源防反接和防倒灌 - 使用MOS 管和运放实现理想二极管
  18. 项目管理知识体系指南(九)项目沟通管理
  19. ps人物素描及黑白上色
  20. Mac开不了机怎么办?

热门文章

  1. atitit.groovy 语法特性
  2. paip.java OutOfMemoryError 解决方法o33
  3. (转)新金融的魔幻IPO:都在讲科技,但最终还是靠现金贷上岸
  4. (转)人工智能无处不在,这次是有公司用它来炒股
  5. Julia : 小s与关于绝对路径的转义方式
  6. CTP: NET封装后接口中序列化数据的问题
  7. C#:SQLite大量插入的效率问题
  8. Alibaba Cloud Linux 2 LTS 正式发布,提供更高性能和更多保障!
  9. 【诚邀】ZStack新品战略发布会4月16号如约开启
  10. 李扬:2018春节港澳游(上篇:行)