在 engine 目录下新建一个 ViewEngine 接口作为所有 PHP 模板引擎实现的契约: <?...php namespace App\View\Engine; interface ViewEngine { public function extract($path, $data): string...; } 接下来,在同级目录下新建一个实现了 ViewEngine 接口的 PhpEngine 类作为 PHP 原生视图模板引擎的实现: <?...php namespace App\View\Engine; class PhpEngine implements ViewEngine { public function extract($...php namespace App\View; use App\Http\Response; use App\View\Engine\ViewEngine; class View { /**
二、ViewEngine View引擎的核心是一个ViewEngine对象,它实现了IViewEngine接口。...如下面的代码片断所示,ViewEngineResult的只读属性View和ViewEngine属性表示找到的View对象和表示自身的ViewEngine对象。...如果我们创建了一个自定义View引擎,相应的ViewEngine也可以通过ViewEngines进行注册。...实际上当这两个方法被调用的时候,会先采用缓存的方式调用相应的ViewEngine,如果返回为Null,则以不采用缓存的方式再次调用它们。...ViewEngineCollection属性值默认来源于ViewEngines的静态属性Engines代表的全局ViewEngine列表。
接下来介绍最重要的ViewResult以及VIewEngine的概念。...ViewEngine也实现了相应的接口,注意View缓存,SearchedLocations属性包含了所有的查找路径,FindView方法的的返回名称比较奇怪,ViewEngineResult,但实际的意思应该是这个...Result包含View和ViewEngine信息。...在另一篇管自定义ViewEngine的博文中对这一块进行了更加深入的介绍。
二、非Mvc中使用Razor 我们一般在使用Razor时都是在ASP.NET MVC中使用.cshtml来作为模板,由ASP.NET MVC的视图引擎(ViewEngine)来生成页面的代码的,总之...{ //准备临时类名,读取模板文件和Razor代码生成器 string templateType = "YOYO.AspNetCore.ViewEngine.Razor.RazorViewTemplate...DefaultClassName = class_name, DefaultNamespace = "YOYO.AspNetCore.ViewEngine.Razor
运行机制 UrlRoutingModule RouteHandler MvcHandler ControllerFactory Controller ActionInvoker ActionResult ViewEngine...(3)在渲染视图环节,ViewEngine找到需要被渲染的视图,View被加载成WebViewPage类型,并渲染生成Html,最终返回Html。...ViewEngine ViewResult几乎是大部分应用程序的返回类型,主要通过ViewEngine...ViewEngine可能主要就是生成Html元素的引擎。...2、FindView 3、ReleaseView :主要用来有ViewEngine释放资源 ViewResultBase 和ViewResult是比较重要的两个类。
routeCollection; private IDictionary _viewData; private IViewEngine _viewEngine... } return _viewData; } } public IViewEngine ViewEngine... { get { return _viewEngine ?? ... throw new ArgumentNullException("value"); } _viewEngine... } 我们从 UrlRoutingModule 开始,历经 MvcRouteHandler、MvcHandler、Controller、ActionFilterAttribute,直到最后的 ViewEngine
然后 Controller返回一个viewresult给ViewEngine然后写到Response中
key.GetHashCode() == this.GetHashCode(); 24: } 25: } 具有如下定义的StaticFileViewEngine代表StaticFileView对应的ViewEngine...现在我们在Global.asax通过如下的代码对自定义的StaticFileViewEngine进行注册,我们将创建的StaticFileViewEngine作为第一个使用的ViewEngine。
创建 ViewResult 对象将会渲染成视图来给用户反馈 ViewResult 创建了ViewPageActivator 对象 ViewResult 选择了正确的ViewEngine,并且会给ViewEngine...的构造函数传ViewPageActivator对象的参数 ViewEngine 创建View类的对象 ViewEngine 调用View的RenderView 方法。
key) 20 return false; 21 return key.GetHashCode() == this.GetHashCode(); 22 } 23 } 第三步,创建视图引擎HTML5ViewEngine...1 public class HTML5ViewEngine : IViewEngine 2 { 3 private Dictionary<HTML5ViewCacheKey, ViewEngineResult...System.Web.HttpApplication 2 { 3 protected void Application_Start() 4 { 5 //省略 6 ViewEngines.Engines.Insert(0, new HTML5ViewEngine
当然我在YOYOFx中也实现了这种视图引擎 ( https://github.com/maxzhang1985/YOYOFx/blob/master/AspNetCore/YOYO.AspNetCore.ViewEngine.Razor
= null) { result.ViewEngine.ReleaseView(context, View); }...} 内部主要是通过ViewResult的FindView方法通过ViewEngine去加载具体的Aspx页面或者是cshtml页面生成对应的page类【针对Aspx】,然后再调用IView
ViewEngine 视图引擎,说的好听点就相当于发动机,就是驱动我们程序运行的机制,那么在MVC中我们可以采用的视图引擎有WebFormViewEngine以及RazorEngine这两种,当然我们也可以采用第三方提供的视图引擎
ViewEngine不仅仅通过FindView/FindPartialView根据当前上下文获取指定的View,还通过ReleaseView对指定的View进行释放回收操作。
②找到ViewEngine视图引擎并获取ViewEngineResult 首先,我们了解一下什么是ViewEngine视图引擎:我们在ASP.NET MVC开发中一般会有两个选择,一个是aspx视图引擎
每种视图引擎主要包括以下三个主要部分: ViewEngine class - 实现自IViewEngine接口;职责是定位视图模板的位置。
(3)在渲染视图环节,ViewEngine找到需要被渲染的视图,View被加载成WebViewPage类型,并渲染生成Html,最终返回Html。 ?
完成导航和站点的设计 这一系列的博客比较早,是ASP.NET MVC 1.0的学习,如需了解一些基本的,原始知识,可从这系列博客中获取 从零开始学习 ASP.NET MVC 1.0 (五) ViewEngine
领取专属 10元无门槛券
手把手带您无忧上云