ASP.NET没有魔法——ASP.NET MVC Razor与View渲染

  对于Web应用来说,它的界面是由浏览器根据HTML代码及其引用的相关资源进行渲染后展示给用户的结果,换句话说Web应用的界面呈现工作是由浏览器完成的,Web应用的原理是通过Http协议从服务器上获取到对应的Html代码以及相关资源,使得浏览器能够完成正确的呈现工作

  ASP.NET MVC作为一个Web应用构建框架View承担了UI显示的功能,在开发过程中View以Action的名称命名,当用户的请求被路由到某一Action方法时,ASP.NET MVC将会根据Action的名称来获取到对应的View文件,将该View文件动态处理后生成最终的Html内容,将内容返回到浏览器进行显示。所以ASP.NET的渲染实际上指的是动态的生成Html代码的过程
  而ASP.NET MVC中action的代码可以简单如下:

  

ASP.NET没有魔法——ASP.NET MVC Razor与View渲染

 

  仅需要调用一个View方法就可以将Index这个View显示到用户的浏览器上,那么View方法到底做了什么处理?Razor是什么?Action方法的返回值ActionResult又是什么?
  本文将从以下几个方面来介绍ASP.NET MVC Html代码的生成过程:
  ●
  ●
    ○
    ○
  ●
  ●
  ●
  ●
  ●
  ●

ActionResult及ViewResult

  在之前的文章《ASP.NET没有魔法——ASP.NET MVC 过滤器(Filter)》中提到过,Action方法是由ActionInvoker完成执行的,Action返回的结果是一个ActionResult类型,Action执行后ActionInvoker又调用了ActionResult的ExecuteResult方法完成特定的操作,相关代码如下所示:

  

ASP.NET没有魔法——ASP.NET MVC Razor与View渲染

  

ASP.NET没有魔法——ASP.NET MVC Razor与View渲染

  ActionResult的定义如下,它包含了一个名为ExecuteResult的方法,该方法用来完成对action方法执行结果进行处理:

  

ASP.NET没有魔法——ASP.NET MVC Razor与View渲染

  回到最初提到的View()方法,该方法定义在Controller中,它的返回值是一个ViewResult类型:

  

ASP.NET没有魔法——ASP.NET MVC Razor与View渲染

  可以这么说,当Action执行完成后,ASP.NET MVC的View渲染工作是由ViewResult在ExecuteResult方法中完成的,ViewResult的ExecuteResult实现代码如下(注:该代码在ViewResult的基类ViewResultBase中实现):

  

ASP.NET没有魔法——ASP.NET MVC Razor与View渲染

  从代码中可以容易的看出,ASP.NET MVC中View的渲染工作主要有四步:
  1. 如果没有指定View的名称,那么默认以Action的名称为View名称。
  2. 根据控制器的上下文查找并获得真实的View对象。
  3. 调用View对象的Render方法将View的内容写到HttpContext的响应信息中,后续将其返回至浏览器。
  4. 释放View对象。

  根据上面的分析View渲染的两个重要步骤就是View对象的查找渲染,其整个过程可参考下图,详细内容将在后续介绍:

  

ASP.NET没有魔法——ASP.NET MVC Razor与View渲染

View的查找与Razor

  在ASP.NET MVC中View文件一般放置在项目根目录的Views目录下,以Controller名称为子目录,每一个子目录下保存了以action方法名称命名的View文件:

  

ASP.NET没有魔法——ASP.NET MVC Razor与View渲染

  ViewResult类型中查找View的代码如下:

  

ASP.NET没有魔法——ASP.NET MVC Razor与View渲染

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpgszy.html