NVelocity 和Razor 模板引擎小Demo, WebForm模板引擎求教

我想用asp.net webform 做个模板引擎的demo,目前用NVelocity 和Razor 各做了个小demo。

首先来看下NVelocity。 

ExpandedBlockStart.gif NVelocity模板文件
 1  <! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
 2  < html  xmlns ="http://www.w3.org/1999/xhtml" >
 3  < head >
 4      < title >NVelocity Demo </ title >
 5      < link  href ="../Css/demo.css"  rel ="stylesheet"   />
 6      < link  href ="../Css/common.css"  rel ="stylesheet"   />
 7  </ head > 
 8  < body >
 9  < form  action ="ParseVM.aspx"  method ="POST" >
10  < div  class ="query-form" >
11     当前时间:$Now
12      < br  />
13      < table >
14          < tr >
15              < td >新闻ID: < input  type ="text"  name ="searchID"  class ="text"  value =""   /></ td >
16              < td >< input  type ="submit"  name ="submit"  value ="查询" ></ td >
17          </ tr >
18      </ table >
19  </ div >
20  </ form >
21  < br >
22  < h2 >新闻列表 </ h2 >
23  < div  class ="Artical-list" >
24 #foreach($c in $Articles)
25 #beforeall
26      < table >
27          < tr  class ="list-header" >
28              < td >ID </ td >
29              < td >标题 </ td >
30              < td >类别 </ td >
31              < td >发布时间 </ td >
32          </ tr >
33 #odd
34          < tr  class ="list-odd" >
35 #even
36          < tr  class ="list-even" >
37 #each
38     #set ( $NewID = $c.ID +0 ) 
39              < td >0$NewID </ td >
40              < td >< href ="#" >$c.Title </ a ></ td >
41              < td >#if($c.Category=1)国内新闻
42     #elseif($c.Category=2)国际新闻
43     #else 其他#end </ td >
44              < td >$c.PulishTime.ToString("yyyy-MM-dd") </ td >
45 #after
46          </ tr >
47 #afterall
48      </ table >
49 #nodata
50     No contacts found!
51 #end
52  </ div >
53  </ body >
54  </ html >

 

 

ExpandedBlockStart.gif 加载和显示模板
 1  public  partial  class ParseVM : System.Web.UI.Page
 2     {
 3          protected  void Page_Load( object sender, EventArgs e)
 4         {
 5             VelocityEngine engine =  new VelocityEngine();
 6 
 7             ExtendedProperties prop =  new ExtendedProperties();
 8              // 定义模板加载根路径
 9              prop.AddProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, Server.MapPath( " ~/ "));
10             prop.AddProperty(RuntimeConstants.ENCODING_DEFAULT,  " utf-8 ");
11             prop.AddProperty(RuntimeConstants.FILE_RESOURCE_LOADER_CACHE,  true);
12             engine.Init(prop);
13 
14             Template template = engine.GetTemplate( " Template/demo.vm ");
15             VelocityContext context =  new VelocityContext();
16 
17              var list = Article.GetArticleList();
18              string searchID = Request.Form[ " searchID "];
19              int id =  0;
20             
21              if (searchID !=  null &&  int.TryParse(searchID,  out id)) {
22                 context.Put( " Articles ", list.Where(p => p.ID == id));
23             }
24              else {
25                 context.Put( " Articles ", list);
26             }
27 
28             context.Put( " Now ", DateTime.Now);
29 
30             template.Merge(context,  this.Response.Output);
31         }
32 
33 
34     }

 

然后看下 Razor。

 

ExpandedBlockStart.gif Razor模板文件
 1  <! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
 2  < html  xmlns ="http://www.w3.org/1999/xhtml" >
 3  < head >
 4      < title >Razor Demo </ title >
 5      < link  href ="../Css/demo.css"  rel ="stylesheet"   />
 6      < link  href ="../Css/common.css"  rel ="stylesheet"   />
 7  </ head >
 8  < body >
 9      < form  action ="ParseRazor.aspx"  method ="POST" >
10      < div  class ="query-form" >
11         当前时间: <% =  DateTime.Now  %>
12          < br  />
13          < table >
14              < tr >
15                  < td >新闻ID: < input  type ="text"  name ="searchID"  class ="text"  value =""   /></ td >
16                  < td >
17                      < input  type ="submit"  name ="submit"  value ="查询" ></ td >
18              </ tr >
19          </ table >
20      </ div >
21      </ form >
22      < br >
23      < h2 >
24         新闻列表 </ h2 >
25      < div  class ="Artical-list" >
26          < table >
27              < tr  class ="list-header" >
28                  < td >ID </ td >
29                  < td >标题 </ td >
30                  < td >类别 </ td >
31                  < td >发布时间 </ td >
32              </ tr >
33             @for (int i = 0; i  <  @Model .Count; i++) {
34                  var article  = @Model[i];
35                   if (i % 2  ==  1) {
36                  @:<tr class ="list-odd" >
37              }
38                 else {
39                 @: < tr  class ="list-even" >
40              }
41              
42                  < td >0@(article.ID) </ td >
43                  < td >< href ="#" >@article.Title </ a ></ td >
44                  < td >@if (article.Category == 1) {
45                         @:国内新闻
46                 }
47                     else if (article.Category == 2) {
48                     @:国际新闻
49                     }
50                     else {
51                     @:其他
52                                     }
53                  </ td >
54                  < td >@article.PulishTime.ToString("yyyy-MM-dd") </ td >
55             }
56              </ :tr >
57          </ table >
58      </ div >
59  </ body >
60  </ html >

 

 

ExpandedBlockStart.gif 加载和显示模板
 1  public  partial  class ParseRazor : System.Web.UI.Page
 2     {
 3          protected  void Page_Load( object sender, EventArgs e)
 4         {
 5              // 模板文件虚拟目录
 6               var path = System.IO.Path.Combine(Request.ApplicationPath,  " /Template/demo.cshtml ");
 7              var type = BuildManager.GetCompiledType(path);
 8              var script = Activator.CreateInstance(type)  as System.Web.WebPages.WebPage;
 9 
10 
11              var model = Article.GetArticleList();
12              string searchID = Request.Form[ " searchID "];
13              int id =  0;
14 
15              var stringWriter =  new StringWriter();
16              if (searchID !=  null &&  int.TryParse(searchID,  out id)) {
17                 script.ExecutePageHierarchy( new WebPageContext(
18                   new HttpContextWrapper(HttpContext.Current),  null, model.Where(p => p.ID == id).ToList()
19                  ), stringWriter);
20             }
21              else {
22 
23                 script.ExecutePageHierarchy( new WebPageContext(
24                      new HttpContextWrapper(HttpContext.Current),  null, model
25                     ),stringWriter );
26 
27             }
28 
29             Response.Write(stringWriter); 
30 
31         }
32 
33     }

 

像NVelocity的话可以通过 context.Put() 方法来输出多个变量,但使用Razor的话,如何添加多个变量在前台显示呢?

下面想试试 webform风格的模板,用WebForm自身的引擎。

但还不知道如何下手,大家能否给点建议?

源代码

转载于:https://www.cnblogs.com/lxfqlcz/archive/2012/02/22/2363504.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值