码迷,mamicode.com
首页 > 其他好文 > 详细

Razor模板引擎

时间:2015-09-15 13:00:09      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:

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

 

Razor模板引擎

标签:

原文地址:http://www.cnblogs.com/adolphyang/p/4809825.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!