1 Razor模板引擎的使用:
(1)常用三种模板引擎:
Razor 解释执行,微软内置、有提示,与JavaScript存在兼容性;
Nvelocity / Vtemplate 运行时动态执行,(比Razor更好)。
(2)Razor引擎的使用:
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> </head> <body> <h1>胡安定</h1> <div> <h2>@Model.Name</h2> <h2>@Model.Age</h2> </div> <div> <ul> @for (var i = 0; i < 10;i++ ) { <li>@i</li> } </ul> </div> </body> </html>
razor1.cshtml
using RazorEngine; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Web; namespace Web_Cassini.Day8 { /// <summary> /// razor1 的摘要说明 /// </summary> public class razor1 : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/html"; string path = context.Server.MapPath("~/Day8/razor1.cshtml"); string cshtml = File.ReadAllText(path); string cacheName=path + File.GetLastWriteTime(path); //文件全名+文件最后修改时间,作为缓存名,保证一旦修改缓存名改变,需要重新编译生成新的程序集 string html = Razor.Parse(cshtml, new { Name = "yzk", Age = 33 }, cacheName); //把cshtml解析为html context.Response.Write(html); } public bool IsReusable { get { return false; } } } }
razor1.ashx
(3)Razor引擎的原理:
每次Razor引擎对cshtml页面字符串 进行解析时,都会进行编译生成新的程序集,
设定cacheName后,只要cshtml页面不发送修改,则razor解析时不会再生成新的程序集。这样就降低内存的占用和时间的消耗。
using RazorEngine; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; namespace Console_razor { class Program { static void Main(string[] args) { //把这个cshtml解析10次 for (int i = 0; i < 10;i++ ) { string path = @"F:\VisualStudio_example\ExamOneself\Console_Core\Web_Cassini\Day8\razor1.cshtml"; string cshtml = File.ReadAllText(path); //string html = Razor.Parse(path, null); string cacheName = path + File.GetLastWriteTime(path); //只要文件未修改,则缓存不会改变 string html = Razor.Parse(cshtml, new { Name = "yzk", Age = 33 }, cacheName); Console.WriteLine(html); Console.ReadKey(); } //输出解析10次过程中产生的所有程序集 Assembly[] asses = AppDomain.CurrentDomain.GetAssemblies(); foreach(Assembly ass in asses ) { Console.WriteLine(ass.FullName+"\r\n"); //发现:如果没有缓存,则每次解析都编译生成新的程序集。占用内存并消耗大量时间。 //所以:需要缓存,只要文件未修改,则缓存不会改变,再次解析就不用再编译生成新的程序集。 } Console.ReadKey(); } } }
Console_razor.csProj
时间: 2024-10-13 07:17:46