ASP.NET Razor 基础介绍

什么是Razor?

 
注意:Razor 不是编程语言。它是服务器端标记语言
Razor 是一种允许您向网页中嵌入基于服务器的代码(Visual Basic 和 C#)的标记语法。
当网页被写入浏览器时,基于服务器的代码能够创建动态内容。在网页加载时,服务器在向浏览器返回页面之前,会执行页面内的基于服务器代码。由于是在服务器上运行,这种代码能执行复杂的任务,比如访问数据库。
Razor 基于 ASP.NET,它为 web 应用程序的创建而设计。它拥有传统 ASP.NET 标记的能力,但更易使用,也更易学习。
 

Razor 语法?

 
Razor 使用的语法与 PHP 和 ASP 相似。
 

Razor 实例?

 
TemplateManager,我某项目中使用的一个模板类。注意:需要引用RazorEngine.dll
CodePlex地址:http://razorengine.codeplex.com/
GitHub获取地址:https://github.com/Antaris/RazorEngine
代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using RazorEngine;
using RazorEngine.Templating;
using RazorEngine.Configuration;
 
namespace LightSmarty.Core
{
    public static class TemplateManager
    {
        static IRazorEngineService Service { get; set; }
        static TemplateServiceConfiguration Configuration { get; set; }
 
        static TemplateManager()
        {
            Configuration = new TemplateServiceConfiguration()
            {
                // setting up our custom template manager so we map files on demand
                TemplateManager = new MyTemplateManager()
            };
            Service = RazorEngineService.Create(Configuration);
            Engine.Razor = Service;
        }
 
        /// <summary>
        /// Resets the cache.
        /// </summary>
        public static void ResetCache()
        {
            Configuration.CachingProvider = new RazorEngine.Templating.DefaultCachingProvider();
        }
 
        /// <summary>
        /// Compiles, caches and parses a template using RazorEngine.
        /// </summary>
        /// <param name="templateName">Type of the template.</param>
        /// <param name="anonymousType">Type of the anonymous object.</param>
        /// <param name="cachedEnabled">true to enabled caching; false otherwise</param>
        /// <returns></returns>
        public static string GetTemplate<T>(string templateName, T anonymousType, bool cachedEnabled = true)
        {
            if (cachedEnabled == false)
                ResetCache();
            // pre-compile, cache & parse the template
            return Engine.Razor.RunCompile(templateName, null, anonymousType);
        }
    }
 
    public class MyTemplateManager : ITemplateManager
    {
        public ITemplateSource Resolve(ITemplateKey key)
        {
            string file = HttpContext.Current.Server.MapPath(string.Format("~/Templates/{0}.cshtml", key.Name));
            return new LoadedTemplateSource(System.IO.File.ReadAllText(file), file);
        }
 
        public ITemplateKey GetKey(string name, ResolveType resolveType, ITemplateKey context)
        {
            return new NameOnlyTemplateKey(name, resolveType, context);
        }
 
        public void AddDynamic(ITemplateKey key, ITemplateSource source)
        {
            throw new NotImplementedException("dynamic templates are not supported!");
        }
    }
}
 
我单独将它从项目中大度抽离出来了,请看截图
下面是body.cshtml的内容
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>@Model.Name</title>
</head>
<body>
    <h1>@Model.Name</h1>
    @{string userName= "Sean";}
    <span>@userName</span>
    <span>@DateTime.Now.ToString("yyyy-MM-hh")</span>
    @{  
    var message="现在时间为:";  
    var time=DateTime.Now;  
    var outMessage=message+time;
    time.AddDays(1);
    }  
    <div>@outMessage </div>  
    @{
        for(int i=0;i<10;i++)
        {
            @:@i;
        }
    } 
</body>
</html>
 
来看Default.aspx.cs的代码:
 
protected void Page_Load(object sender, EventArgs e)
        {
            string html = TemplateManager.GetTemplate("body", new
            {
                Name = "Sean's Blog DMSTU.com"
            }, true);
            Response.Write(html);
            Response.End();
        }
 
运行截图:
 
如果你也在研究Razor,希望上面提到的内容能帮助到你,如果需要代码,请留言附邮箱!
评论 (0) 分享 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址