从Web Form开始,视图的机制其实就没改变过,动态编译视图脚本。所不同的是,Razor就仅仅是模板,没在嵌入与网站等相关的东西,应该是SRP的一个体现。
可惜,这种功能分离仍做得不彻底,MVC中,Razor与其他部分的整合仍比较多,路径的寻找等功能的嵌入,使得它不容易单独拿出来使用。当然,这也是微软的一贯风格,整体使用性能优先。视图引擎浅析
模板是其最主要的功能,但是另一个次功能也不可忽视,内嵌帮助方法及其智能代码完成功能。这个附助功能,大大提高效能。
现在,我们面临的问题是,当脱离ASP。Net MVC的框架以后,如何保持这个特性。幸运的是,微软提供了扩展的接口或者说方法。
在阐述解决方案之前,还是再回顾一下视图引擎的原理。
从Web Form到Razor,即有继承也有扬弃。模板文件(cshtml vbhtml),仍然是当作一个类来处理,这与原来的机制是一致,不同的是不再是静态类,以前文件名就是页面类名,并且还可以有一个真正的类文件直接使用(code behind, partial class)。而Razor是完全的运行时编译生成的类,甚至类名都是临时生成Guid。
所有这些改变,使得对View的控制如同要抓住随风漂动的树叶,几乎不可能,幸运的是,漂动叶子有着不动的根,这个根就是所有View的基类,WebViewPage。注意到这个类是个抽象类,原因显而易见。
抓到这个根本之后,MVC的很多特性和功能就立马找到了出处。
比如,HtmIHelper(Razor 使用@Html), Model (Razor 使用@Model)等,其实都是这个基类的一个属性。
以上就是Razor视图的主要的机制,如果开发人员只使用ASPNet MVC本身的功能,而不去扩展,或者像我们一样完全创建一套自己全新的框架,那么这些背后的故事,知道也可,不了解也无所谓。
而对我们的框架开发来说,还有一个重要问题,扩展接口在哪里?答案却是极其简单,在Web,Config文件有一块<pages>的配置区或,其中有一项ParseBaseType改成你自己View的基类即可。甚至,代码智能提示(IntelliSense)功能就马上起作用(也许要重起Visual Studio)。这个自定义类可以继承自WebViewPage,但非必须。
好了,万事俱备,可以开始展开你想象翅膀,做你想作的事了。
分享到:
相关推荐
Razor视图引擎语法 注意事项 等等
Golang的Razor视图引擎
简单的介绍了一些MVC3 Razor视图引擎的基本语法,很适合刚学MVC3的人用
ASPNET_MVC3_系列教程_-_Razor视图引擎基础语法
XML与WEB Service技术(微软):第11章 Razor视图引擎.ppt
Razor 是一种允许向网页中嵌入基于服务器的代码(C#)的标记语法,是微软针对ASP.NET MVC推出的模板引擎。 C# 的主要 Razor 语法规则 Razor 代码封装于 @{ … } 中 行内表达式(变量和函数)以 @ 开头 ...
这个是我本人写的《在winform使用razor模板引擎》的一个例子,参考了msdn上面的文章(作者:Matt Wrock,文章名称:Using the Razor templating engine outside of MVC)及某篇在winform上面配置razor 智能提示的文章...
ThemeableRazorViewEngine Razor 视图引擎,支持向 MVC 应用程序添加主题。
RazorPDF, 在 ASP.NET MVC中,通过 Razor 视图制作pdf的简单项目 RazorPDFRazorPDF是一个简单的项目,它使用 Razor 视图引擎来创建 pdf 。 由于 Razor 是一个模板语法,它可以做的不仅仅是生成 HTML 。 RazorPDF使用...
gorazor是razor视图引擎的Go端口,起源 。 总而言之, gorazor是: 极快。 模板被转换为Go代码,然后进行优化编译。 语法简洁,没有像<?这样的定界符, <%或{{ 。 asp.net的原始和 。 能够在视图模板...
GoRazor 是 Razor 视图引擎的 Go 语言移植版本。语法:<div>Hello @strings.ToUpper(req.CurrentUser.Name) 标签:GoRazor
基于Asp.Net MVC 3 Razor 视图引擎的插件架构
该项目使用来预编译视图。 支持的应用程序类型 .NET Core 3.0 .NET Core 3.1 NET 5 安慰 ✓ ✓ ✓ 阿皮 ✓ ✓ ✓ 多媒体 ✓ ✓ ✓ 工人服务 ✓ ✓ ✓ WPF ✓ ✓ ✓ WinForms ✓ ✓ ✓ 应用...
这是本人翻译的一篇英文文章【Hosting the Razor Engine for Templating in Non-Web Applications】里面的例子,可以直接使用,有兴趣可以看我的译文版【假如你不嫌弃翻译渣的话】,也可以直接查看原文地址:...
主要为大家详细介绍了Razor模板引擎的简单资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
在非MVC环境下使用 Razor引擎,方便使用思路不错
网上找的把razor引擎独立使用的一个项目
在Razor视图中填充下拉列表-本指南介绍了几种在ASP.NET MVC Razor视图中填充下拉列表的常用方法,重点在于生成功能HTML表单用最少的代码。 注意:PluralSight和作者对本代码中的错误或遗漏不承担任何责任。 有关...
剃刀数据库 由 Razor 视图和自定义元数据填充的内存中集合。 请参阅
Razor原版文档,讲的挺好,英文版,有助于理解.Net 中 MVC Razor引擎