asp.net mvc 之旅—— 第二站 窥探Controller下的各种Result
平时我们在Action中编码的时候,我们都知道所有的Action返回值类型都是ActionResult,并且我们的返回值也是各种奇葩,比如:Json(),Content(),
View()等等。。。当你写这个代码的时候,你是不是有一种强烈的偷窥欲。。。那这篇我们就一起来看一看。
一:实例代码
public class HomeController : Controller
{
public ActionResult Index()
{
ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application."; return View();
} public ActionResult About()
{
ViewBag.Message = "Your app description page."; return Json("");
} public ActionResult Contact()
{
ViewBag.Message = "Your contact page."; return Content("");
}
}
1. View()
还是老规矩,我们用ILSpy来看看它的源码会是怎样。。。


从上面的图中,我们大概可以看到,其实我们在Action中做View()的时候,其实内部仅仅是做了一个new ViewResult的操作,然后代码继续会从
ViewEngineCollection这个集合中去寻找我需要的View,那就有人疑问了,ViewEngineCollection这个集合怎么填充的,其实我也不知道。。。
但我们可以看到,如果在Collection中能找到View的话,会返回一个viewEngineResult回去,如果没有找到则通过SearchedLocations将寻找路
径全部打印出来。。。就像下面这样,是不是很有意思?

2.Json()
在当前富客户端的大背景下,几乎没有程序不Json()吧,我们通常都是把Model塞给Json就行了,到了客户端就已经是Json字符串了,这个肯定
是毫无疑问的,下面我们也是继续看看它的源码里面到底怎么玩的。。。



从上面的代码中可以看到,其实所谓的Json并没有什么。。。仅仅是response.write(xxxx.serialize(xxxx))而已, 本以为是什么高大上的东西。。。
其实呢??? 你懂的。。。
3. Content()
当你知道了Json()之后,我觉得你应该对Content的原理已经很清楚了,因为Json还是需要用javascriptSerializer序列化器来序列化Model,然后才
是真的将序列化后的json送到客户端,你也猜到Content根本就不会这么做,而是仅仅将string喷到前端即可。。。对不对。。。


好了,夜深了。。。就简单分析到这里了,其他的几个Result都是在Controller类下面的,如果你愿意用ILSpy去查看的话,那么一切都不是问
题,比如下面我在Controller中一个简单的截图就有5个Result了。。。

asp.net mvc 之旅—— 第二站 窥探Controller下的各种Result的更多相关文章
- asp.net mvc 之旅—— 第一站 从简单的razor入手
记得2011年mvc3刚出来的时候,我们就有幸将 mvc3 用在我们团购项目上,当时老大让我们用一个星期时间来熟悉mvc,幸好园子里面的老朋友DR 正在写mvc3系列,也恭喜这个系列文章被整理成专题供 ...
- ASP.NET MVC 5 入门教程 (2) 控制器Controller
文章来源: Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc-5-get-started-controller.html 上一节:ASP.NET MVC ...
- 返璞归真 asp.net mvc (7) - asp.net mvc 3.0 新特性之 Controller
原文:返璞归真 asp.net mvc (7) - asp.net mvc 3.0 新特性之 Controller [索引页][源码下载] 返璞归真 asp.net mvc (7) - asp.net ...
- ASP.NET MVC中的cshtml页面中的下拉框的使用
ASP.NET MVC中的cshtml页面中的下拉框的使用 用上@Html.DropDownList 先记下来..以做备忘...
- asp.net mvc 之旅 —— 第六站 ActionFilter的应用及源码分析
这篇文章我们开始看一下ActionFilter,从名字上其实就大概知道ActionFilter就是Action上的Filter,对吧,那么Action上的Filter大概有几个呢??? 这个问题其实还 ...
- ASP.NET MVC中防止跨站请求攻击(CSRF)
转载 http://kevintsengtw.blogspot.co.nz/2013/01/aspnet-mvc-validateantiforgerytoken.html 在 ASP.NET M ...
- ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第二篇:第一个页面
摘要 本文首先一步一步完成Demo的第一个页面——首页.然后根据实现过程,说明一下其中用到的与ASP.NET MVC相关的概念与原理. 让第一个页面跑起来 现在,我们来实现公告系统 ...
- Javascript之旅——第二站:对象和数组
一觉睡到中午,本来准备起来洗洗继续睡,不过想想没辙,还得继续这个系列,走过变量的第一站,第二站我们再来看看对象和数组. 一:对象 说起对象,我们不自然就想起了面向对象中自封装的一个类,同样JS中也 ...
- Asp.net mvc返回Xml结果,扩展Controller实现XmlResult以返回XML格式数据
我们都知道Asp.net MVC自带的Action可以有多种类型,比如ActionResult,ContentResult,JsonResult……,但是很遗憾没有支持直接返回XML的XmlResul ...
随机推荐
- 不可或缺 Windows Native (24) - C++: 运算符重载, 自定义类型转换
[源码下载] 不可或缺 Windows Native (24) - C++: 运算符重载, 自定义类型转换 作者:webabcd 介绍不可或缺 Windows Native 之 C++ 运算符重载 自 ...
- WITH RECURSIVE and MySQL
WITH RECURSIVE and MySQL If you have been using certain DBMSs, or reading recent versions of the SQL ...
- hash简单介绍
hash也称"散列", 是一种基于映射关系的存储方式,将任意长度的二进制值输出为固定长度的较小的二进制值,这种输出的小的固定长度的值为hash值: 1. 散列技术是在关键字key与 ...
- InfluxDB学习之InfluxDB的基本概念
InfluxDB与传统数据库在概念上有许多的不同,本文就给大家介绍下InfluxDB中的一些基本概念,更多InfluxDB详细教程请看:InfluxDB系列学习教程目录 InfluxDB技术交流群:5 ...
- Guava学习笔记目录
Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency libra ...
- Node.JS事件驱动机制
1.事件驱动程序绑定事件及事件的处理程序 eventEmitter.on('eventName', eventHandler); 我们可以通过程序触发事件 // 触发事件 eventEmitter.e ...
- PCL -语法错误:“::” error C2589: “(”:“::”右边的非法标记
1.错误原因:系统函数与pcl中的max函数冲突导致的 2.两种解决办法: 1)错误中max和min函数用括号括起来,例如"std::Max"修改为“(std::Max)”. 2) ...
- javascript使浏览器关闭前弹出确认
当用户关闭页面时,弹出对话框,让用户确认是否关闭,选择确定则页面关闭,否则页面不关闭. 效果体验:http://keleyi.com/keleyi/phtml/js/index.htm 完整代码: & ...
- Ext.store.load callback
var paramsReceivable = {}; paramsReceivable.querytext = Ext.getCmp('hiddquerytext').g ...
- javascript对象继承详解
问题 比如我们有一个"动物"对象的构造函数. function animal() { this.type = '动物'; } 还有一个"猫"对象的构造函数. f ...