NopCommerce架构分析之(六)自定义RazorViewEngine和WebViewPage
系统中对Razor的支持包括两部分,其中之一就是自定义RazorViewEngine
一、自定义RazorViewEngine
在Global.asax.cs的Application_Start方法中,注册了自定义视图引擎:
//remove all view engines ViewEngines.Engines.Clear(); //except the themeable razor view engine we use ViewEngines.Engines.Add(new ThemeableRazorViewEngine());
ThemeableRazorViewEngine继承ThemeableBuildManagerViewEngine,
ThemeableBuildManagerViewEngine继承ThemeableVirtualPathProviderViewEngine
ThemeableVirtualPathProviderViewEngine继承VirtualPathProviderViewEngine,达到对虚拟路径解析的目的。
说到ASP.NET MVC中的视图引擎(ViewEngine),就不得不说IView和IViewEngine这两个接口,要实现自定义的视图引擎就必须要实现这两个接口:
IView接口:IView是对MVC结构中View对象的抽象,此接口只有一个方法:void Render(ViewContext viewContext, TextWriter writer);Render方法将页面HTML写入到Writer中供浏览器显示;
IViewEngine接口:IViewEngine接口的职责是寻找View对象,编写自己的视图引擎时可以继承自IViewEngine并重写该类的FindView和FindPartialView方法,这两个方法返回一个ViewEngineResult表示搜索结果。
ASP.NET MVC提供了两个实现了IViewEngine接口的类:VirtualPathProviderViewEngine和WebFormViewEngine。VirtualPathProviderViewEngine类实现了FindView和FindPartialView这两个方法,用于根据指定的路径和格式来搜索页面文件,并且提供了Cache机制来缓存数据(由于使用的是ASP.NET Cache,依赖于HttpContext,所以无法在WebService或WCF项目中使用)。
VirtualPathProviderViewEngine寻找页面的时候,具体从哪些路径下进行寻找其实是根据该类中的这三个属性来决定的:MasterLocationFormats、ViewLocationFormats、PartialViewLocationFormats,修改这三个属性可以给我们的视图引擎分配自定义的搜索路径和文件格式。
二、自定义类WebViewPage<TModel>
此类表示呈现使用ASP.NET Razor语法的视图所需的属性和方法。
所以每一个视图都应该继承此类。但是我们在项目中是看不到此继承的,默认情况下Razor会让视图继承自System.Web.Mvc.WebViewPage<TModel>基类。也可以通过修改视图目录(每一个asp.net mvc项目下面都有一个~/Views/目录)下的web.config文件来更改默认基类,NopCommerce就是使用此方法实现自定义WebViewPage类的。除此之外也可以在视图文件中引入命名空间,但这种方法比较繁琐,除非一个项目中有个别视图需要自定义WebViewPage。
- 教你如何在 Javascript 文件里使用 .Net MVC Razor 语法
- ASP.NET Razor模板引擎中输出Html的两种方式
- asp.net模板引擎Razor调用外部方法用法实例
- 使用Asp.net Mvc3 Razor视图方式扩展JQuery UI Widgets方法介绍
- asp.net实现在非MVC中使用Razor模板引擎的方法
- ASP.NET MVC使用RazorEngine解析模板生成静态页
- ASP.NET MVC4 Razor模板简易分页效果
- asp.net模板引擎Razor中cacheName的问题分析
- Asp.net MVC中Razor常见的问题与解决方法总结
- Razor模板引擎简单介绍
相关文章
在ASP.NET 2.0中操作数据之二十四:分页和排序报表数据
本文主要介绍ASP.NET 2.0中使用GirdView控件呈现数据时如何实现分页和排序功能的,希望对大家有所帮助。2016-05-05
在ASP.NET 2.0中操作数据之十四:使用FormView 的模板
前面介绍了GridView和DetailsView控件可以使用TemplateField来自定义输出,但是呈现的样式还是一种四四方方的格子状。当我们想完全自定义的时候,他们就爱莫能助了,这时我们就可以使用FormView控件来实现我们想要的效果了。2016-05-05
《解剖PetShop》之四:PetShop之ASP.NET缓存
本文主要讲解PetShop4.0的ASP.NET缓存,极大的提高的网站的性能,需要的朋友可以参考下。2016-05-05
ExecuteReader(),ExecuteNonQuery(),ExecuteScalar(),ExecuteXml
ExecuteReader(),ExecuteNonQuery(),ExecuteScalar(),ExecuteXmlReader()之间的区别...2006-10-10
Visual Studio 2017使用EF选择MySQL数据源
这篇文章介绍了Visual Studio 2017使用EF选择MySQL数据源,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2022-01-01
.NET 2.0获取配置文件AppSettings和ConnectionStrings节数据的方法
.NET 2.0获取配置文件AppSettings和ConnectionStrings节数据的方法...2007-12-12
在ASP.NET 2.0中操作数据之六十五:在TableAdapters中创建新的存储过程
本文主要讲解使用TableAdapter设置向导自动创建增删改查的存储过程,虽然自动创建存储过程可以节省时间,但他们会包含一些无用的参数,下节我们会介绍TableAdapter使用现有的存储过程。2016-05-05


最新评论