如何利用RazorEngine在ASP.NET MVC中高效生成静态页面模板?

2026-04-01 09:251阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1746个文字,预计阅读时间需要7分钟。

如何利用RazorEngine在ASP.NET MVC中高效生成静态页面模板?

Razor是ASP.NET MVC 3新增的技术,作为ASPX模板引擎的替代品。在早期的MVC版本中,默认使用的是ASPX模板引擎。Razor在语法上准确无误,使用起来非常方便,简洁的语法与.NET Framework紧密结合。

简述

Razor是ASP.NET MVC 3中新加入的技术,以作为ASPX引擎的一个新的替代项。在早期的MVC版本中默认使用的是ASPX模板引擎,Razor在语法上的确不错,用起来非常方便,简洁的语法与.NET Framework 结合,广泛应用于ASP.NET MVC 项目。

我们在很多项目开发中会常常用到页面静态化,页面静态化有许多方式,最常见的就是类似很多PHP CMS种使用的 标签替换的方式(如:帝国CMS、EcShop等),还有很多都是伪静态,伪静态我们就不做过多解释,通过路由或Url重写来实现就可以了。Razor为我们提供了更加方便的模板解析方式,任何东西都是两方面的,技术也是如此,Razor解析模板虽然更加方便、简洁,但是对于模板制作人员来说也是有一定的技术要求,或者对于开发一套模板制作功能来说,考虑的要更多一些。我们不再去探究这些问题,我们更注重哪种技术更容易、更方便、更好的满足我们项目的需求。

如何使用RazorEngine

今天来简单介绍一下如何使用RazorEngine解析模板生成静态页面,RazorEngine它是基于微软的Razor之上,包装而成的一个可以独立使用的模板引擎。也就是说,保留了Razor的模板功能,但是使得Razor脱离于Asp.net MVC,能够在其它应用环境下使用,项目地址:RazorEngine_jb51.rar

首先我们去codeplex上下两个需要的dll razorengine.codeplex.com

看到网上很多介绍RazorEngine的基础用法的,讲解的都比较详细,对于RazorEngine运行原理很清晰,我们在这里就不重复介绍了。写这篇文章是对于很多新手同学来说比较喜欢“拿来主义”,基本的用法原理都能看懂,但是如何应用到项目中还是有些不是很清晰,我们只讲讲如何在项目中运用。

本文分为两部分:第一个部分,基本的单数据模型模板解析;第二部分,面向接口的多数据模型模板解析

第一个部分 基本的单数据模型模板解析

一、我们创建一个MVC项目,并且添加上面的两个DLL引用,然后我们新建一个简单的文章类

public class Articles { /// <summary> /// 文章ID /// </summary> public int Id { get; set; } /// <summary> /// 文章标题 /// </summary> public string Title { get; set; } /// <summary> /// 文章内容 /// </summary> public string Content { get; set; } /// <summary> /// 作者 /// </summary> public string Author { get; set; } /// <summary> /// 发布时间 /// </summary> public DateTime CreateDate { get; set; } }

二、我们新建一个Razor的Html模板

<!DOCTYPE html> <html xmlns="www.w3.org/1999/xhtml"> <head> <meta www.springframework.net"> <description>Spring注入Service,容器指向本层层封装的接口</description> <object id="Service.ArticleManage" type="Service.ArticleManage,Service" singleton="false"> </object> <object id="Service.ColumnManage" type="Service.ColumnManage,Service" singleton="false"> </object> <object id="Service.CompanyManage" type="Service.CompanyManage,Service" singleton="false"> </object> </objects>

五、我们分别初始化一个文章类、一个公司类(没有管理数据表,它下面没有文章列表 栏目模型我就不初始化了,怎么输出列表 大家可以参考下 栏目模板)

public class HomeController : Controller { /// <summary> /// 声明一下注入接口 /// </summary> public IArticleManage ArticleManage = Spring.Context.Support.ContextRegistry.GetContext().GetObject("Service.ArticleManage") as IArticleManage; public ICompanyManage CompanyManage = Spring.Context.Support.ContextRegistry.GetContext().GetObject("Service.CompanyManage") as ICompanyManage; public IColumnManage ColumnManage = Spring.Context.Support.ContextRegistry.GetContext().GetObject("Service.ColumnManage") as IColumnManage; public ActionResult Index() { //初始化一个文章数据模型 var entityArticle = new Domain.Articles() { Id = 1, Title = "这里是文章标题", Content = "<span style=\"color:red;\">这里是文章内容</span>", Author = "张三", CreateDate = DateTime.Now }; //初始化一个公司数据模型 var entityCompany = new Domain.Company() { Id = 1, CompanyName = "这里是公司名称", CompanyTel = "公司电话", ContectUser = "张三", CreateDate = DateTime.Now }; //调用方法生成静态页面 ArticleManage.CreateStaticPage(Server.MapPath("/Templates/Temp_article.html"), Server.MapPath("/Pages/news/" + DateTime.Now.ToString("yyyyMMddHHmmss") + "1.html"), entityArticle); CompanyManage.CreateStaticPage(Server.MapPath("/Templates/Temp_company.html"), Server.MapPath("/Pages/news/" + DateTime.Now.ToString("yyyyMMddHHmmss") + "2.html"), entityCompany); return View(); } public ActionResult About() { ViewBag.Message = "Your application description page."; return View(); } public ActionResult Contact() { ViewBag.Message = "Your contact page."; return View(); } }

六、这是测试的简单的文章模板、公司模板和栏目模板

如何利用RazorEngine在ASP.NET MVC中高效生成静态页面模板?

<!DOCTYPE html> <html xmlns="www.w3.org/1999/xhtml"> <head> <meta www.w3.org/1999/xhtml"> <head> <meta www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> </head> <body> <p>栏目标题: @Model.Title</p> <p> 文章列表 <ul> @foreach(var item in @Model.Articles) { <li> <a href=""> <span>@item.Title</span> <span>@item.Author</span> <span>@item.CreateDate</span> </a> </li> } </ul> </p> </body> </html>

我们运行一下,大功告成~~~

怎么排序?怎么获取前几条?怎么格式化日期时间?怎么分页?

这可是Razor啊,这都不需要再多讲了吧,简单一说,如果你传入数据前没有事先排序或者获取前几条,这些操作要做模板里操作 那跟在.cshtml里基本是一样的

@foreach(var item in @Model.ListColumn) { <div > @if (@item.LinkUrl==null) { <ul> @foreach(var article in @item.COM_ARTICLE.Take(15).OrderByDescending(p=>p.UpDateDate)) { <li> <a href="@article.LinkUrl" rel="external nofollow" class="gd-a"> <div>@article.Title</div></a> </li> } </ul> } else { } </div> }

应用还是很广泛的,而且解析代码相对于标签替换来说十分简洁、高效。有时间可以多研究研究,改天有空写一个模板替换标签的供大家参考一下。有人会说那我还得教前台制作Razor语法,这种说法我们没法去置评,标签替换你仍然要教他如何使用标签啊,所以是不是复杂并不是探究的主题,想要前台制作人员更方便的制作一套模板语法并不是主要因素,比如我们可以做一套方便的模板制作,用户点击一下就生成代码,或者直接做成可视化的,这可能让我们的程序员要耗费更多的精力,但是一劳永逸,标签替换方式你仍然要给前台制作人员一套标签规范和语法,况且后台解析异常的庞大和复杂。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易盾网络。

本文共计1746个文字,预计阅读时间需要7分钟。

如何利用RazorEngine在ASP.NET MVC中高效生成静态页面模板?

Razor是ASP.NET MVC 3新增的技术,作为ASPX模板引擎的替代品。在早期的MVC版本中,默认使用的是ASPX模板引擎。Razor在语法上准确无误,使用起来非常方便,简洁的语法与.NET Framework紧密结合。

简述

Razor是ASP.NET MVC 3中新加入的技术,以作为ASPX引擎的一个新的替代项。在早期的MVC版本中默认使用的是ASPX模板引擎,Razor在语法上的确不错,用起来非常方便,简洁的语法与.NET Framework 结合,广泛应用于ASP.NET MVC 项目。

我们在很多项目开发中会常常用到页面静态化,页面静态化有许多方式,最常见的就是类似很多PHP CMS种使用的 标签替换的方式(如:帝国CMS、EcShop等),还有很多都是伪静态,伪静态我们就不做过多解释,通过路由或Url重写来实现就可以了。Razor为我们提供了更加方便的模板解析方式,任何东西都是两方面的,技术也是如此,Razor解析模板虽然更加方便、简洁,但是对于模板制作人员来说也是有一定的技术要求,或者对于开发一套模板制作功能来说,考虑的要更多一些。我们不再去探究这些问题,我们更注重哪种技术更容易、更方便、更好的满足我们项目的需求。

如何使用RazorEngine

今天来简单介绍一下如何使用RazorEngine解析模板生成静态页面,RazorEngine它是基于微软的Razor之上,包装而成的一个可以独立使用的模板引擎。也就是说,保留了Razor的模板功能,但是使得Razor脱离于Asp.net MVC,能够在其它应用环境下使用,项目地址:RazorEngine_jb51.rar

首先我们去codeplex上下两个需要的dll razorengine.codeplex.com

看到网上很多介绍RazorEngine的基础用法的,讲解的都比较详细,对于RazorEngine运行原理很清晰,我们在这里就不重复介绍了。写这篇文章是对于很多新手同学来说比较喜欢“拿来主义”,基本的用法原理都能看懂,但是如何应用到项目中还是有些不是很清晰,我们只讲讲如何在项目中运用。

本文分为两部分:第一个部分,基本的单数据模型模板解析;第二部分,面向接口的多数据模型模板解析

第一个部分 基本的单数据模型模板解析

一、我们创建一个MVC项目,并且添加上面的两个DLL引用,然后我们新建一个简单的文章类

public class Articles { /// <summary> /// 文章ID /// </summary> public int Id { get; set; } /// <summary> /// 文章标题 /// </summary> public string Title { get; set; } /// <summary> /// 文章内容 /// </summary> public string Content { get; set; } /// <summary> /// 作者 /// </summary> public string Author { get; set; } /// <summary> /// 发布时间 /// </summary> public DateTime CreateDate { get; set; } }

二、我们新建一个Razor的Html模板

<!DOCTYPE html> <html xmlns="www.w3.org/1999/xhtml"> <head> <meta www.springframework.net"> <description>Spring注入Service,容器指向本层层封装的接口</description> <object id="Service.ArticleManage" type="Service.ArticleManage,Service" singleton="false"> </object> <object id="Service.ColumnManage" type="Service.ColumnManage,Service" singleton="false"> </object> <object id="Service.CompanyManage" type="Service.CompanyManage,Service" singleton="false"> </object> </objects>

五、我们分别初始化一个文章类、一个公司类(没有管理数据表,它下面没有文章列表 栏目模型我就不初始化了,怎么输出列表 大家可以参考下 栏目模板)

public class HomeController : Controller { /// <summary> /// 声明一下注入接口 /// </summary> public IArticleManage ArticleManage = Spring.Context.Support.ContextRegistry.GetContext().GetObject("Service.ArticleManage") as IArticleManage; public ICompanyManage CompanyManage = Spring.Context.Support.ContextRegistry.GetContext().GetObject("Service.CompanyManage") as ICompanyManage; public IColumnManage ColumnManage = Spring.Context.Support.ContextRegistry.GetContext().GetObject("Service.ColumnManage") as IColumnManage; public ActionResult Index() { //初始化一个文章数据模型 var entityArticle = new Domain.Articles() { Id = 1, Title = "这里是文章标题", Content = "<span style=\"color:red;\">这里是文章内容</span>", Author = "张三", CreateDate = DateTime.Now }; //初始化一个公司数据模型 var entityCompany = new Domain.Company() { Id = 1, CompanyName = "这里是公司名称", CompanyTel = "公司电话", ContectUser = "张三", CreateDate = DateTime.Now }; //调用方法生成静态页面 ArticleManage.CreateStaticPage(Server.MapPath("/Templates/Temp_article.html"), Server.MapPath("/Pages/news/" + DateTime.Now.ToString("yyyyMMddHHmmss") + "1.html"), entityArticle); CompanyManage.CreateStaticPage(Server.MapPath("/Templates/Temp_company.html"), Server.MapPath("/Pages/news/" + DateTime.Now.ToString("yyyyMMddHHmmss") + "2.html"), entityCompany); return View(); } public ActionResult About() { ViewBag.Message = "Your application description page."; return View(); } public ActionResult Contact() { ViewBag.Message = "Your contact page."; return View(); } }

六、这是测试的简单的文章模板、公司模板和栏目模板

如何利用RazorEngine在ASP.NET MVC中高效生成静态页面模板?

<!DOCTYPE html> <html xmlns="www.w3.org/1999/xhtml"> <head> <meta www.w3.org/1999/xhtml"> <head> <meta www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> </head> <body> <p>栏目标题: @Model.Title</p> <p> 文章列表 <ul> @foreach(var item in @Model.Articles) { <li> <a href=""> <span>@item.Title</span> <span>@item.Author</span> <span>@item.CreateDate</span> </a> </li> } </ul> </p> </body> </html>

我们运行一下,大功告成~~~

怎么排序?怎么获取前几条?怎么格式化日期时间?怎么分页?

这可是Razor啊,这都不需要再多讲了吧,简单一说,如果你传入数据前没有事先排序或者获取前几条,这些操作要做模板里操作 那跟在.cshtml里基本是一样的

@foreach(var item in @Model.ListColumn) { <div > @if (@item.LinkUrl==null) { <ul> @foreach(var article in @item.COM_ARTICLE.Take(15).OrderByDescending(p=>p.UpDateDate)) { <li> <a href="@article.LinkUrl" rel="external nofollow" class="gd-a"> <div>@article.Title</div></a> </li> } </ul> } else { } </div> }

应用还是很广泛的,而且解析代码相对于标签替换来说十分简洁、高效。有时间可以多研究研究,改天有空写一个模板替换标签的供大家参考一下。有人会说那我还得教前台制作Razor语法,这种说法我们没法去置评,标签替换你仍然要教他如何使用标签啊,所以是不是复杂并不是探究的主题,想要前台制作人员更方便的制作一套模板语法并不是主要因素,比如我们可以做一套方便的模板制作,用户点击一下就生成代码,或者直接做成可视化的,这可能让我们的程序员要耗费更多的精力,但是一劳永逸,标签替换方式你仍然要给前台制作人员一套标签规范和语法,况且后台解析异常的庞大和复杂。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易盾网络。