图说MVC底层运行机制:

当路由机制已经激活Controller并InvokeAction后,如果返回的是View, 则ViewResult基于View呈现的请求响应机制内部借助MVC提供的View引擎来实现对View的获取、激活和呈现。

ASP.NET MVC提供的View引擎有两种,一种是传统的Web Form引擎(.aspx),另一种那个就是要讲的Razor引擎(.cshtml/vbhtml)。

View引擎的核心是ViewEngine对象,它实现IViewEngine接口,IViewEngine定义了两个FindView和FindPartialView方法,根据指定的ControllerContext、View名称和布局文件名称获取对应的View和PartialView;还有用于释放View对象的ReleaseView方法。

ViewEngines是一个类型为IViewEngine的ViewEngine的集合,它的静态只读属性Engines的类型是ViewEngineCollection。

ViewEngineCollection中的FindView/FindPartialView方法返回的类型是ViewEngineResult。

ViewEngineResult的只读属性View和ViewEngine属性表示的是找到的View对象和作为调用者的ViewEngine对象。在成功获取到对应View的情况下这两个属性会通过构造函数进行初始化。如果没有找到相应的View,则将表示搜寻位置的字符串列表传入另一个构造函数来创建返回的ViewEngineResult,只读属性SearchedLocation表示的就是这么一个搜寻位置列表,如下图所示(由于WebFormViewEngine排在RazorViewEngine之前,所有前者会被优先使用。):

Razor引擎中的View和ViewEngine对应的类型为RazorView和RazorViewEngine。RazorView对应一个以.cshtml/.vbhtml文件定义的View文件,这样的文件通过ASP.NET的动态编译生成一个WebViewPage<TModel>类型。RazorView通过激活的WebViewPage<TModel>对象实现了对View的最终呈现。

附ActionResult类型:

MVC从Controller到View的呈现的更多相关文章

  1. MVC:Controller向View传值方式总结

    Controller向View传值方式总结 总结发现ASP.NET MVC中Controller向View传值的方式共有6种,分别是: ViewBag ViewData TempData 向普通Vie ...

  2. ASP.NET MVC中controller和view相互传值的方式

    ASP.NET MVC中Controller向view传值的方式: ViewBag.ViewData.TempData 单个值的传递 Json 匿名类型 ExpandoObject Cookie Vi ...

  3. Asp.net MVC中 Controller 与 View之间的数据传递

    在ASP.NET MVC中,经常会在Controller与View之间传递数据 1.Controller向View中传递数据 (1)使用ViewData["user"] (2)使用 ...

  4. MVC中Controller与View中间的数据传递的常用方法

    这几天正在学习MVC,顺便就将自己每天的学习心得记录下来与大家分享一下吧! 在MVC中,Controller与View之间传递数据是很频繁的事情,所以在这里就总结一下我自己在学习中使用的几种常用的方法 ...

  5. MVC中Controller与View之间的数据传递

    一.Controller向View传递数据 Controller向View传递数据有3种形式: 通过ViewData传递 在Controller里面的Action方法中定义ViewData,并且赋值, ...

  6. MVC从Controller到view进行传值的方法

    这几天基本上都是交接的一些杂事,没有什么工作任务,就有空来回顾一下MVC.虽然工作中也用到了MVC,但已经被微软的架构师设计的找不到MVC的影子了,可能有别的考虑吧,至今还没研究出来.所以,今天就来回 ...

  7. ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View

    Controller父类会提供很多上下文的相关信息,还提供了很多封装的方法 返回的对象要求实现了IActionResult接口 继承父类,并引入命名空间 写this点就出现很多东西,这些就是上下文的信 ...

  8. Asp.Net MVC中Controller与View之间传递的Model

    Controller --> View 的Model 与 提交表单后 View --> Controller 的Model 不是相同的对象,即:这两个Model为不同的指针,指向不同的地址 ...

  9. ASP.NET MVC Controller向View传值方式总结

    Controller向View传值方式总结 总结发现ASP.NET MVC中Controller向View传值的方式共有6种,分别是: ViewBag ViewData TempData 向普通Vie ...

随机推荐

  1. 032 Java再次总结

    1.大纲 多线程怎么用的,线程池,事务,传播机制与隔离级别,反射,泛型,数据库引擎的区别,数据库merge,窗口函数,fastJson,JVM调优,GC钩子,Linux的awk,shell,HashM ...

  2. Android Studio 2.1及其以上版本中的instant run功能 介绍

    Android Studio 2.0及其以后版本中的instant run功能 介绍 转 https://blog.csdn.net/zy987654zy/article/details/514961 ...

  3. onenote使用教程

    1. OneNote的基础功能 随处可以记录笔记 收集页面 微信关注公众号 [微软云笔记] IE和Chrome等浏览器扩展-OneNote Clipper 通过绘图实现手绘效果 插入音频与视频 实现多 ...

  4. SQL Server 分区表上建立ColumnStore Index 如何添加新分区方法与步骤

    在生产环境中会遇到这样的场景,一个表随着时间的推移,越来越大,这个时候我们开始动手为这个表建立分区来改进查询性能. 但是表过大上百个G的时候,在数据仓库中,为了改进查询性能,我们可以添加在分区表的基础 ...

  5. Linux-共享内存通信

    Linux共享存储通信 内容 创建共享存储区实现进程通信 机理说明 共享存储区(Share Memory)是Linux系统中通信速度最高的通信机制.该机制中共享内存空间和进程的虚地址空间满足多对多的关 ...

  6. FunData — 电竞大数据系统架构演进

    电竞出现在人们视野中的频率越来越高了,此次选取FunData作为电竞数据平台,v1.0 beta版本主要提供由Valve公司出品的顶级MOBA类游戏DOTA2相关数据接口(详情:open.varena ...

  7. Android中Adapter类的使用 “Adapter”

    Adapter用来把数据绑定到扩展了AdapterView类的视图组(例如:ListView或Gallery).Adapter负责创建代表所绑定父视图中的底层数据的子视图. 可以创建自己的Adapte ...

  8. kaggle之泰坦尼克号乘客死亡预测

    目录 前言 相关性分析 数据 数据特点 相关性分析 数据预处理 预测模型 Logistic回归训练模型 模型优化 前言 一般接触kaggle的入门题,已知部分乘客的年龄性别船舱等信息,预测其存活情况, ...

  9. idhttp提交post带参数并带上cookie

    有这么一个提交连接 http://www.XXXXXX.com/test.php?p1=411328&p2=1&d1=HeroSkinList 一共有三个参数[p1]  [p2]  [ ...

  10. PHP常用日期加减计算方法实例

    PHP常用日期加减计算方法实例 实例总结了PHP常用日期加减计算方法.分享给大家供大家参考,具体如下: PHP 标准的日期格式 date("Y-m-d H:i:s"); PHP 简 ...