Asp.net MVC视图引擎有两种:
1、ASPX View Engine
这个做过WebForm的人都清楚
设计目标:一个用于呈现Web Form页面的输出的视图引擎。
2、Razor View
在Asp.net MVC 3 版本引入的, 可以支持UnitTest,也容易上手。
Razor在减少代码冗余、增强代码可读性和vs 智能感知方面,都有着很大的优势。
下面主要讨论下视图引擎
ActionResult
讲到视图引擎,不得不说ActionResult,因为在Controller中,我们看不到一点视图引擎的影子,唯一提供线索的只有ActionResult,所以我们必须先从AcionResult下手
下面是ASP.NET MVC提供的所有的ActionResult类型的类图:
最具代表性的是ViewResult
在Asp.net MVC中,ViewResult用的最多,Controller有一个View方法,它来实例化一个ViewResult对象,并返回。
这里只介绍几个最常用的Result用法:
(1)EmptyResult:
当用户有误操作或者是图片防盗链的时候,这个EmptyResult就可以派上用场,返回它可以让用户啥也看不到内容,通过访问浏览器端的源代码,发现是一个空内容;
public ActionResult Empty() { return new EmptyResult(); }
(2)Content:
通过Content可以向浏览器返回一段字符串类型的文本结果,就相当于Response.Write("xxxx");一样的效果;
public ActionResult ContentResultDemo() { string contentString = "Hello Edison Chou!"; return Content(contentString); }
(3)File:
通过File可以向浏览器返回一段文件流,主要用于输出一些图片或文件提供下载等;
public ActionResult FileStreamResultDemo() { FileStream fs = new FileStream(Server.MapPath(@"/Content/programmer.jpg"), FileMode.Open, FileAccess.Read); return File(fs, @"image/gif"); }
(4)HttpUnauthorizedResult:
通过HttpUnauthorizedResult可以向浏览器输出指定的状态码和状态提示,如果不指定状态码,则默认为401无权访问;
public ActionResult HttpUnauthorizedResultDemo() { return new HttpUnauthorizedResult(); }
(5)Redirect与RedirectToAction:
重定向与重定向到指定Action,我一般使用后者,主要是向浏览器发送HTTP 302的重定向响应;
public ActionResult RedirectResultDemo() { return Redirect(@"http://localhost:23531/Home/ContentResultDemo"); } public ActionResult RedirectToRouteResultDemo() { return RedirectToAction("FileStreamResultDemo", "Home"); }
(6)Json:
通过Json可以轻松地将我们所需要返回的数据封装成为Json格式,进行Ajax开发可以变得so easy!
public ActionResult JsonResultDemo() { var tempObj = new { Controller = "HomeController", Action = "JsonResultDemo" }; return Json(tempObj, JsonRequestBehavior.AllowGet); }
(7)JavaScript:
可以通过JavaScriptResult向浏览器单独输出一段JS代码,不过由于主流浏览器都对此进行了安全检查,因此你的JS代码也许无法正常执行,反而是会以字符串的形式显示在页面中;