原来 Razor 也可以作为模版用来生成代码,看来 T4 即将过时
2011-07-30 20:39
591 查看
最近遇到html模板解析,我完全可以用MS的T4模板或者是StringTemplate等其他的模板来做,但是出于尝试和对Razor语发的感兴趣,便翻了翻Razor模板的资料,其CodePlex主页http://razorengine.codeplex.com/。
下面讲的都是一些其主页上面的例子,所以请大家别拍砖。别后面想到有些实际意义的例子在写个具体的运用例子吧。
public static class Razor
{
public static string Parse(string template, string name = null);
public static string Parse(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,后者是带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 : TemplateBase
{
public string ToUpperCase(string name)
{
return name.ToUpper();
}
}
输出结果为:My name in UPPER CASE is: MATT。
在我们的MyCustomTemplateBase抽象类中我们可以像MVC一样定义一些辅助属性和方法,像html、Request、Response等辅助类等
有事我们需要自定义一些非modle的非static property给Template,我的考虑是在TemplateService 中的重写Parse方法中初始化Action:
public string Parse(string template, T model, string name = null,Action> initAction);
下面讲的都是一些其主页上面的例子,所以请大家别拍砖。别后面想到有些实际意义的例子在写个具体的运用例子吧。
public static class Razor
{
public static string Parse(string template, string name = null);
public static string Parse(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,后者是带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 : TemplateBase
{
public string ToUpperCase(string name)
{
return name.ToUpper();
}
}
输出结果为:My name in UPPER CASE is: MATT。
在我们的MyCustomTemplateBase抽象类中我们可以像MVC一样定义一些辅助属性和方法,像html、Request、Response等辅助类等
有事我们需要自定义一些非modle的非static property给Template,我的考虑是在TemplateService 中的重写Parse方法中初始化Action:
public string Parse(string template, T model, string name = null,Action> initAction);
相关文章推荐
- T4模版生成SpringMVC构造REST代码:第七篇 用T4模版生成MyBatis映射文件代码
- 最近设计了一个生成asp代码的程序,同时也可以作为数据库管理查询的软件,有兴趣的朋友可以去下载!
- T4模版生成SpringMVC构造REST代码:第五篇 用T4模版生成Service服务层接口代码
- 数据库生成T4模版在代码生成中的应用心得
- [转]创建代码生成器可以很简单:如何通过T4模板生成代码?[上篇]
- T4模版生成SpringMVC构造REST代码:第一篇 SpringMVC构造REST结构分析
- T4模版生成SpringMVC构造REST代码:第三篇 用T4模版生成POCO类代码
- T4模版生成SpringMVC构造REST代码:第五篇 用T4模版生成Service服务层接口代码
- T4模版在代码生成中的应用心得
- Linq to Oracle 使用教程(八)使用 T4 模版生成代码
- 创建代码生成器可以很简单:如何通过T4模板生成代码?[上篇]
- T4模版生成SpringMVC构造REST代码:第六篇 用T4模版生成ServiceImpl服务实现层代码
- T4模版生成SpringMVC构造REST代码:第三篇 用T4模版生成POCO类代码
- 创建代码生成器可以很简单:如何通过T4模板生成代码?[下篇]
- 创建代码生成器可以很简单:如何通过T4模板生成代码?[下篇]
- 属性名称T4模版生成SpringMVC构造REST代码:第三篇 用T4模版生成POCO类代码
- T4模版生成SpringMVC构造REST代码:小结
- 一起谈.NET技术,创建代码生成器可以很简单:如何通过T4模板生成代码?[上篇]
- freemarker 替换字符串,模板,可以用来动态生成代码
- 一起谈.NET技术,创建代码生成器可以很简单:如何通过T4模板生成代码?[下篇]