View视图的职责是向用户提供界面,负责根据提供的模型数据生成准备提供给用户的格式界面,并提供用户和系统交互的入口。
View和Action之间前后台数据传递的方式有如下几种:
1.弱类型ViewData[""]
2.动态型ViewBag
3.动态类型Model
4.临时存储TempData[""]
5.后台:return View(data);
6.前台:Model 其实就是 WebViewPage.Model
部分视图:
1.Partial与RenderPartial方法
1)Razor语法 :@Html.Partial与@{Html.RenderPartial();}
2)区别:Partial可以直接输出内容,在内部将html内容转换为String字符(MVCHtmlString),然后缓存起来,最后一次性输出到页面。显然,这个转换过程会降低效率,所以通常使用RenderPartial代替。
2.RenderPartial与RenderAction方法
1)Razor语法 :@{Html.RenderPartial();}与@{Html.RenderAction();}
2)区别:RenderPartial不需要创建Controller的action,而RenderAction需要 在Controller中创建要加载的Action。
RenderAction会先去调用Controller的Action再呈现视图,所以这里会再发起一个链接。
如果这个部分视图只是一些简单的HTML代码,请使用RenderPartial。如果这个部分视图除了有HTML代码外,还需要 通过读取数据库里的数据来渲染,就必须使用RenderAction了,因为它可以在Action里调用Model里的方法读取数据库,渲染视图后再呈现,而RenderPartial没有Action,所以无法做到。
3.RenderAction与Action
1)Razor语法:@{Html.RenderAction();}与@Html.Action();
2)区别Action也是直接输出,和Partial一样,也存在一个转换过程,但是不如RenderAction直接 输出到当前HttpContext的效率高。
4.RenderPage与RednerPartial方法
1)语法 :@{Html.RenderPartial();}与@RenderPage();
2)区别:也可以使用RenderPage来呈现部分,但它不能使用原来视图的Model和ViewData,只能通过参数来传递;而RenderPartial可以使用原来视图的Model和ViewData。
视图引擎
HTTP请求==》路由==>控制器==》Action
视图结果==》视图引擎==》视图==》响应
1)视图引擎发挥作用的地方紧跟在Action方法执行后,目的是获取从控制器传递的数据,并生成经过格式化的输出
2)控制器不渲染视图,它仅仅准备数据并通过ViewResult实例来决定调用哪个视图。
Net MVC请求处理流程
mvc请求流程:
客户端请求--》IIS--》Runtime--》Controller--》Action--》ViewResult(:ActionResult).ExcuteResult()-->RazorView(:IView).RenderView-->Response.