平時咱們在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了。。。