忙碌的工作总是占据了生活的大部分的时间!所以我的博客到现在还是寥寥的几篇文章,技术是用来分享和学习的,对技术有不同的见解,大家都可以分享下,如果如下文章有问题之处请各位指出来,在这个闲下来的时间给大家说说mvc Razor除了在视图上解析外,一样可以这样用。

在有些项目需求上或许需要根据模板生产静态页面,那么你一样可以用Razor语法去直接解析你的页面从而把解析的页面生成静态页,首先介绍下RazorEngine,在nuget上可以直接引用到项目上,这个东西通俗的来讲就是可以在任何地方解析razor语法,个人觉得要比NVelocity灵活好用很多。在codeplex上有介绍,现在好像搬到Github上了,链接http://razorengine.codeplex.com/,最新的版本在Github上,大家可以看看,使用上很方便,如下:

string template = "Hello @Model.Name! Welcome to Razor!";string result = Razor.Parse(template, new { Name = "World" });

  就这么简单你就可以不只在视图页面上使用Razor了,它完全支持动态类型,如下:

dynamic ViewBag = new DynamicViewBag();ViewBag.list = "流年莫逝";
string template = "Hello Word @ViewBag.list";string result = Razor.Parse(template,null,ViewBag,Guid.NewGuid().ToString());

一样可以解析出来,看源码活着是VS的智能提示你可以看到Razor.Parse后面需要传递的参数类型,只要对号入座就行了,它是支持cache的,当然它的这种cache我个人理解的并不是那种数据缓存的cache,如上面dynamic类型的解析Razor.Parse我是演示用的Guid,但是你可以用其他的string字符,如果你下次预编译模板的时候还是用的这个名字的话就会直接取cache里的模板来做解析,这样减少了解析时间,这是我的个人理解,目前还没有深入的去研究。
      RazorEngine还支持自定义模板,如下代码:

//自定义模板public class MyTemplateBase<T> : TemplateBase<T>{public string GetStr(){return "流年莫逝";}
}//注册自定义模板public class CustomTemplate : TemplateService{public CustomTemplate(){var Service = new RazorEngine.Configuration.TemplateServiceConfiguration();Service.BaseTemplateType = typeof(MyTemplateBase<>);var MyTemplate = new TemplateService(Service);Razor.SetTemplateService(MyTemplate);}
}

简单介绍下啊,上面那个是自定义的模板,里面你可以按你的需求写相应的方法,这样在解析的时候你一样可以使用你的方法,比方我的是返回的字符串,你用@GetStr()一样可以得到你的返回值,另外你的自定义模板一样要继承TemplateBase<T>,我看了它的源码不知道为什么一样要带上一个泛型,想研究的可以自己看看,注册模板后你就可以使用了,
CustomTemplate service = new CustomTemplate();
return service.Parse(Content, null, ViewBag, Guid.NewGuid().ToString());按这种方法就可以解析了,Razor.Parse方法是TemplateService类里面的一个虚方法,是支持自己重写的,所以在注册的时候你继承了这个TemplateService类,就是可以实现你想要的了!

看到官网上有很多提问为什么不能用@Html.Raw()等这些方法,其实你要是仔细看源码的话是可以支持的,只是换了个写法你可以直接用@Raw()来进行输出,就简单介绍这么多吧,其实RazorEngine还有很多功能的,但是目前以上几种完全够解析页面用了!

转载于:https://www.cnblogs.com/liunianmoshi/p/3271670.html

.NET Mvc Razor也可以这样玩!相关推荐

  1. DotNet Core 2.2 MVC Razor 页面编译为 View.dll 文件的解决方法

    DotNet Core 2.2 MVC Razor 页面编译为 View.dll 文件的解决方法 参考文章: (1)DotNet Core 2.2 MVC Razor 页面编译为 View.dll 文 ...

  2. MVC Razor 语法(转)

    http://blog.sina.com.cn/s/blog_580e98300100yvz4.html 原文地址:MVC Razor 语法(转)作者:panzhaowen_jacki 语法名称 Ra ...

  3. Asp.Net Core Mvc Razor之RazorPage

    在AspNetCore.Mvc.Razor命名空间中的RazorPage继承RazorPageBase,并定义的属性为: HttpContext Context 表示当前请求执行的HttpContex ...

  4. 体验 ASP.NET Core 1.1 中预编译 MVC Razor 视图

    这是从 ASP.NET Core 1.1 官方发布博文中学到的一招,可以在 dontet publish 时将 Razor 视图编译为 .dll 文件. 需要在 project.json 中添加如下配 ...

  5. asp.net mvc 包含了一个 html 的助手类在哪里,c# - 在App_Code中使用@HTML的ASP.NET MVC Razor Helper - 堆栈内存溢出...

    我尝试在cshtml文件中的App_Code中创建一个Helper. // Using's are needed to ensure helpers function correctly. @usin ...

  6. C#MVC Razor的Ajax.BeginForm里面的OnSuccess未执行(未成功跳转)

    C#MVC Razor的Ajax.BeginForm里面的OnSuccess未执行(未成功跳转),结合网上的说法,检查以下位置 1.引用Jquery,注意版本,网上说版本要低一点 <script ...

  7. Asp.net MVC razor语法参考

    Razor语法的快捷参考http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx/ 只是copy下来便于查阅! I ...

  8. mvc razor html.list,NetCore Web应用开发-HTML,C#,Razor补充

    原标题:NetCore Web应用开发-HTML,C#,Razor补充 我了后续更深入学习Net MVC的需要,我们这一节需要对HTML,C#,Razor,BootStrap部分知识点做介绍. 我们先 ...

  9. ASP.NET MVC Razor视图引擎

    本篇文章我们一起来讨论ASP.NET MVC框架中的Razor视图引擎.主要包含以下内容: Razor简介 Razor语法 Razor如何呈现页面 布局页(Layout) Razor简介 Razor是 ...

最新文章

  1. CentOS 安装Apache
  2. java 两个数交换问题
  3. 【Flutter教程】从零构建电商应用(一)
  4. win10设置禁止系统更新
  5. java实现订单物品计算佣金,java三角形、NextDay、佣金问题代码
  6. scala编程第16章学习笔记(3)——List类的高阶方法
  7. quartz mysql 驱动_quartz mysql 集成
  8. python中的颜色及其编码
  9. 拉杆音响电池升压芯片4.2V转12V2.5A大功率升压芯片
  10. spline: 计算机曲线简史(转载)
  11. win10调整鼠标滚轮方向
  12. MER 音乐情感识别-论文笔记7
  13. Python +大数据-知行教育(四)-意向用户主题看板_全量流程
  14. 2011推荐系统论坛游记:爱的反义词不是恨
  15. 测试工具和测试自动化
  16. 【机器学习中的矩阵分解】LU分解、QR分解、SVD分解
  17. 2020-1-29 深度学习笔记5 - 机器学习基础(构建机器学习算法)
  18. 视频编解码(SPS重要参数)
  19. 蓝代斯克助力企业决胜现代化IT
  20. 大阪第63天——今天又数了一遍万年历

热门文章

  1. 文件句柄?文件描述符?傻傻分不清楚
  2. 分库、分表、分区的区别,傻傻分不清?
  3. SpringCloud的版本
  4. maven快照版本和发布版本
  5. Java线上应用故障排查之一:高CPU占用
  6. 多线程:了解一下ForkJoin、FutureTask、BlockingQueue
  7. 【Python】青少年蓝桥杯_每日一题_8.27_因数个数
  8. 【阿里云域名】我都有服务器了,为什么还要购买域名?
  9. oracle修改字段名称 试图删除被依赖列_oracle 添加 删除列 修改表名字 ;加注释 异常解释...
  10. 计算机二本生不学编程还能干什么6,不建议二本考生报考的6个专业,除非真的感兴趣!...