View的呈现
Http为请求响应协议,Server
端针对Client
端请求做出响应。在Asp.net中通过HttpResponse
对象写入服务端响应。
在asp.net mvc中action执行返回ActionResult
对象类型,ActionResult.ExecuteResult()
通过调用HttpReponse
相应客户端,对于Html
页面响应,借助引擎定制Html
。
ActionResult
本节介绍一些基本的类型响应类(这些通过实现ActionResult
类)。同时为了操作方便:Controller
提供了响应的调用方法。
类型 | Controller中调用方法 | 目的 |
---|---|---|
EmptyResult | 无 | 服务端不向客户端输出内容 |
ContentResult | Content() | 向客户端输出纯文本 |
FileContentResult | File() | 文件下载,接受byte[] |
FilePathResult | File() | 文件下载,接受文件path |
FileStreamResult | File() | 文件下载,接受文件流FileStream |
JavascriptResult | JavaScript() | 返回客户端脚本 |
JsonResult | Json() | 返回Json类型文本 |
HttpStatusCodeResult | HttpNotFound()或new HttpUnauthorizedResult() | 路径不存在或没有权限 |
RedirectResult | Redirect() | 跳转http路径 |
RedirectToRouteResult | RedirectToAction() | route路由 |
注意文件下载有两种方式:
- 文件直接在浏览器打开(内敛方式下载)
- 附件形式下载(需要设置http
Content-Disposition:attachment;filename={FileDownName}
),在MVC中设置FileDownloadName
就按附件形式下载。
ViewResult
在大多数情况下,Server端响应的是Html页面,对这种复杂的内容实现方便生成,通过引擎。
Engine的提供
IView
为View页面接口,Render()
方法将html输出到客户端。通过Engine
生成View,
ViewEngines
为ViewEngine
集合生成View遍历所有项ViewEngine
方法FindPartialView()
和FindView()
返回ViewEngineResult
包含IView
IView
通过Render()
生成html响应
注意Controller
中提供View()
方法将数据传递到View。常用的view(object model),model为ViewResult.Model
ViewResult调用引擎
ViewResult
继承自ViewResultBase
。其中ViewResultBase.ViewEngineCollection
为注册的所有Engines
。
其中ViewResult.FindView
通过遍历获得ViewEngineResult
Engine
Asp.net MVC自带两种Engine,WebForm和Razor(提倡使用),第一次访问文件时将.chtml文件动态编译为程序集。