文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Razor Templating Engine

Razor Templating Engine

时间:2010-12-22  来源:破狼

      下面讲的都是一些其主页上面的例子,所以请大家别拍砖。别后面想到有些实际意义的例子在写个具体的运用例子吧。

代码 public static class Razor 

    public static string Parse(string template, string name = null); 
    public static string Parse<T>(string template, T model, string name = null); 
    public static void SetLanguageProvider(ILanguageProvider provider); 
    public static void SetMarkupParser(MarkupParser parser); 
    public static void SetTemplateBaseType(Type type); 
}

 

在Razor这个静态类中最重要的方法当然是我们的Parse方法了,其有两个重载,在第二个重载在我们可以传入Template的Model,了解asp.net mvc都会知道这个Model。同时我们可以用SetLanguageProvider方法传入LanguageProvider(C#、VB)等,SetTemplateBaseType传入模板BaseType(可能是我们的自定义类型)。

1:先来个简单的Template:

代码 static void Main(string[] args) 
       { 
           string template = "Hello @Model.Name! Welcome to Razor!"; 
           string result = Razor.Parse(template, new { Name = "World" });         
           Console.WriteLine(result); 
           Console.Read(); 
       } 

 

 

输出结果:

Hello World! Welcome to Razor!

在这里我们传入的是new { Name = "World" }的匿名对象的Model。

2:内部嵌套方法:

 

string template = @"@helper MyMethod(string name) {

Hello @name

}

@MyMethod(Model.Name)! Welcome to Razor!"; 

string result = Razor.Parse(template, new { Name = "World" }); 

 

输出同样是上边的结果,但是注意这里的与上面不同的是在{}中间的空格等是不会忽略的。我的理解是同样是一个模板的形式吧。

3:传递模板参数:

在传递参数的情况下我们可以采用自定义类,继承至TemplateBase 或者TemplateBase<T>,后者是带Model的情形。

还是官方的例子来看看,

代码 static void Main(string[] args) 
    { 
        Razor.SetTemplateBaseType(typeof(MyCustomTemplateBase<>));

        string template = "My name in UPPER CASE is: @ToUpperCase(Model.Name)"; 
        string result = Razor.Parse(template, new { Name = "Matt" });

        Console.WriteLine(result); 
        Console.Read(); 
    } 

public abstract class MyCustomTemplateBase<T> : TemplateBase<T> 

    public string ToUpperCase(string name) 
    { 
        return name.ToUpper(); 
    } 



 

输出结果为:My name in UPPER CASE is: MATT。

在我们的MyCustomTemplateBase<T>抽象类中我们可以像MVC一样定义一些辅助属性和方法,像html、Request、Response等辅助类等

有事我们需要自定义一些非modle的非static property给Template,我的考虑是在TemplateService 中的重写Parse方法中初始化Action:

public string Parse<T>(string template, T model, string name = null,Action<ITemplate<dynamic>> initAction);
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载