ViewData属性

  ViewData属性是System.Web.Mvc.ControllerBase中的一个属性,它相当于一个数据字典。Controller中向该字典写入数据,ViewData[“Key”]=data;View中从该字典中获取数据 int data=ViewData[“Key”]。从ViewData中获取到的数据是object类型,必须强制类型转换。

 //
// 摘要: Gets or sets the dictionary for view data.
// 返回结果: The dictionary for the view data.
public ViewDataDictionary ViewData { get; set; }

ViewBag属性

C# 4.0中才提出的ViewBag,在ViewData上引入了动态特性,算是ViewData的语法糖。

ViewData

ViewBag

Key/Value字典集合

Dynamic类型对象

比ViewBag读取速度快

比ViewData读取数据慢

需要强制类型转换

不需要强制类型转换

 //
// 摘要: Gets the dynamic view data dictionary.
// 返回结果: The dynamic view data dictionary.
[Dynamic]
public dynamic ViewBag { get; }

  实际项目中,使用ViewData和ViewBag在Controller与View中进行数据传递,并不是最佳选择,主要有以下缺点:

1.         性能问题

ViewData中的值都是对象类型,使用之前必须强制转化为需要的类型,增加了额外的性能消耗。

2.         类型不安全

没有类型不安全就不会出现编译错误,调用时转换为其他类型,就会报出运行时错误,良好的编程经验告诉我们,错误最好在编译时铺货。

3.         破坏了Controller与View的松散耦合

MVC模式中,Controller和View是松散耦合的,即Controller不知道View的变化,View也不知道Controller的变化,但是,当使用ViewData或ViewBag进行值传递时,就需要知道写入的是什么值,从而破坏了这种松散的关系。

强类型View方式

  ViewData和ViewBag所出现的问题的关键就是数据类型,因此,如果在Controlle和View之间将数据类型固定,所出现的问题就会得到解决。

  View方式,是使用Controller基类中的View方法进行值传递。

  使用方式为:

  1. Controller返回值,将返回的值作为View()的参数。
  2. View视图中,在代码顶部需要添加代码 @model 返回值的数据类型
  3. View代码中,就可以使用@Model方式来使用返回数据。

Ps:视图顶部添加代码,数据类型必须是全命名空间。也可以在Web.config文件中添加以下命名空间的配置,就可以省略命名空间的信息,只需要添加类名称即可。

 <system.web.webPages.razor>
<pages pageBaseType=”…..”>
<namespace>
<add namespace=”…..”>
……
</namespace>
<pages>
</system.web.webPages.razor>

View延伸

MVC模式中,M是数据模型,负责业务逻辑,一般都对应着数据库模型,V是数据视图,仅仅是数据展示,不包含数据逻辑。而在使用View()方式传递数据时,将数据模型直接通过Controller传递给View,在一些情况下可能会违反MVC的体系架构规则。

为避免出现类似问题,解决方案是在Model和View中添加一层ViewModel,用来负责在两者间进行数据传递。Controller将Model中数据封装成ViewModel,View根据ViewModel直接展示数据,不处理数据逻辑。

ASP.NET MVC 学习笔记-5.Controller与View的数据传递的更多相关文章

  1. ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET MVC 学习笔记-6.异步控制器 ASP.NET MVC 学习笔记-5.Controller与View的数据传递 ASP.NET MVC 学习笔记-4.ASP.NET MVC中Ajax的应用 ASP.NET MVC 学习笔记-3.面向对象设计原则

    ASP.NET MVC 学习笔记-7.自定义配置信息   ASP.NET程序中的web.config文件中,在appSettings这个配置节中能够保存一些配置,比如, 1 <appSettin ...

  2. ASP.NET MVC学习笔记-----使用自定义的View Engine

    我们都知道在ASP.NET MVC中自带了Razor View Engine,Razor十分的强大,可以满足我们绝大部分的需要.但是ASP.NET MVC的高度可扩展性,使我们可以使用自定义的View ...

  3. ASP.NET MVC学习笔记-----Filter2

    ASP.NET MVC学习笔记-----Filter(2) 接上篇ASP.NET MVC学习笔记-----Filter(1) Action Filter Action Filter可以基于任何目的使用 ...

  4. ASP.NET MVC学习笔记-----Filter

    ASP.NET MVC学习笔记-----Filter(1) Filter类型 接口 MVC的默认实现 Description Authorization IAuthorizationFilter Au ...

  5. ASP.NET MVC学习笔记-----Filter(2)

    接上篇ASP.NET MVC学习笔记-----Filter(1) Action Filter Action Filter可以基于任何目的使用,它需要实现IActionFilter接口: public ...

  6. ASP.NET MVC 学习笔记-2.Razor语法 ASP.NET MVC 学习笔记-1.ASP.NET MVC 基础 反射的具体应用 策略模式的具体应用 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用 C#读取XML文件的基类实现

    ASP.NET MVC 学习笔记-2.Razor语法   1.         表达式 表达式必须跟在“@”符号之后, 2.         代码块 代码块必须位于“@{}”中,并且每行代码必须以“: ...

  7. Spring MVC 学习笔记11 —— 后端返回json格式数据

    Spring MVC 学习笔记11 -- 后端返回json格式数据 我们常常听说json数据,首先,什么是json数据,总结起来,有以下几点: 1. JSON的全称是"JavaScript ...

  8. ASP.NET MVC 学习4、Controller中添加SearchIndex页面,实现简单的查询功能

    参考:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/examining-the-edit-method ...

  9. 【转】ASP.NET MVC学习笔记-Controller的ActionResult

    1. 返回ViewResult public ActionResult Index()   {       ViewData["Message"] = "Welcome ...

随机推荐

  1. 第一课:Python入门(笔记)

    一.变量 1.什么是变量 #变量即变化的量,核心是“变”与“量”二字,变即变化,量即衡量状态. 2.为什么要有变量 #程序执行的本质就是一系列状态的变化,变是程序执行的直接体现,所以我们需要有一种机制 ...

  2. 图片处理类 类库--C#

    调用如下: Bitmap bitmap = new Bitmap("C:\\Users\\Thinkpad\\Desktop\\aa.jpg"); Bitmap[] bit = n ...

  3. VSCode插件开发全攻略(二)HelloWord

    更多文章请戳VSCode插件开发全攻略系列目录导航. 写着前面 学习一门新的语言或者生态首先肯定是从HelloWord开始. 您可以直接克隆我放在GitHub上vscode-plugin-demo 的 ...

  4. SpringMVC 全局异常处理

    在 JavaEE 项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的.不可预知的异常需要处理.每个过程都单独处理异常,系统的代码耦合度 ...

  5. 新鲜出炉的一套Java面试题

    作者:孤独烟 由于近期是互联网寒冬,然而烟哥的好友还是顶着重重压力出去面试,最终斩获无数offer.在烟哥的沟通下,终于套得其中一套题目,故在此分享! 公司:国内三巨头其中的一家!面试时间约在1月份左 ...

  6. 【Spark调优】聚合操作数据倾斜解决方案

    [使用场景] 对RDD执行reduceByKey等聚合类shuffle算子或者在Spark SQL中使用group by语句进行分组聚合时,经过sample或日志.界面定位,发生了数据倾斜. [解决方 ...

  7. 机器学习入门01 - 框架处理(Framing)

    原文链接:https://developers.google.com/machine-learning/crash-course/framing (监督式)机器学习的定义:机器学习系统通过学习如何组合 ...

  8. HTML一些有趣的东西

    1.<head>标签里: <meta http-equiv="Refresh" content="3"/><!--三秒自动刷新-- ...

  9. MngoDb MongoClientOptions 配置信息及常用配置信息

    MongoClientOptions.Builder addClusterListener(ClusterListener clusterListener)Adds the given cluster ...

  10. 解决关于ios访问相机闪退问题

    在mac上的ionic3项目打包成苹果app,系统版本是10.3.3 . 当调用相机的时候出现闪退情况,这是调试出现的问题: This app has crashed because it attem ...