asp.net mvc 之旅—— 第二站 窥探Controller下的各类Result

   平时咱们在Action中编码的时候,咱们都知道全部的Action返回值类型都是ActionResult,而且咱们的返回值也是各类奇葩,好比:Json(),Content(),javascript

View()等等。。。当你写这个代码的时候,你是否是有一种强烈的偷窥欲。。。那这篇咱们就一块儿来看一看。前端

一:实例代码java

 1     public class HomeController : Controller
 2     {
 3         public ActionResult Index()
 4         {
 5             ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";
 6 
 7             return View();
 8         }
 9 
10         public ActionResult About()
11         {
12             ViewBag.Message = "Your app description page.";
13 
14             return Json("");
15         }
16 
17         public ActionResult Contact()
18         {
19             ViewBag.Message = "Your contact page.";
20 
21             return Content("");
22         }
23     }

1. View()json

  仍是老规矩,咱们用ILSpy来看看它的源码会是怎样。。。app

 

从上面的图中,咱们大概能够看到,其实咱们在Action中作View()的时候,其实内部仅仅是作了一个new ViewResult的操做,而后代码继续会从this

ViewEngineCollection这个集合中去寻找我须要的View,那就有人疑问了,ViewEngineCollection这个集合怎么填充的,其实我也不知道。。。编码

但咱们能够看到,若是在Collection中能找到View的话,会返回一个viewEngineResult回去,若是没有找到则经过SearchedLocations将寻找路spa

径所有打印出来。。。就像下面这样,是否是颇有意思?3d

2.Json()code

   在当前富客户端的大背景下,几乎没有程序不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了。。。

相关文章
相关标签/搜索