作者:拍友2502902623 | 来源:互联网 | 2023-07-24 00:00
PersonpersonnewPerson();person.Nameyzk;person.Age30;PersondadnewPerson();dad.Nameywx;dad
Person person = new Person();
person.Name = "yzk";
person.Age = 30;
Person dad = new Person();
dad.Name = "ywx";
dad.Age =
60;
person.Father = dad;
在html模板中可以这样取值
我的老爹是
$p.Father.Name,他的年龄是$p.Father.Age
19、Nvelocity的特性,如果建立的对象是个索引,还可以把索引当做它的值。
Dictionary
dict=new
Dictionary();//建一个Dictionary键值对
dict["tom"]="斯坦福";
dict["jim"]="加里敦";
dict["yzk"]="哈佛";
//把Dictionary扔给模板引擎
VelocityEngin vltEngine=new VelocityEngine();
vltEngine.SetProperty(RuntimeConstants.RESOURCE_LOADER,"file");
vltEngine.SetProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH,System,Web.Hosting.HostingEnvironment.MapPath("~/templates"));
vltEngine.Init();
VelocityContext vltContext=new VelocityContext();
vltContext.Put("ps",dict);//这里改成使用字典
Template vltTemplate=vltEngine.GetTemplates("test3.htm");
System.IO.StringWriter.vltWriter=new System.IO.StringWriter();
vltTemplate.Merge(vltContext,vltWriter);//用GastleNvelocity1.11版本的就不会报错了
string html=vltWriter.GetStringBuilder().ToString();
context.Response.Write(html);
--------------------------------test3.htm
$ps.tom;
可以得到斯坦福
20、Nvelocity的深入,可以对对象进行foreach
C#基本语法
string[] strs=new
string[]{"dsdsds",sresfs"};
foreach(string s in strs)
{
Console.WriteLine(s);
}
-------------------------------可以类似于这样的遍历
string[]
strs=new
string[]{"黄继光","古天乐","张靓颖"};
vltContext.Put("mingrens",strs);
-----------------------------------------------
List
persOns=new List();//用前面定义好的那个Person类
persons.Add(new
Person{Age=30,Name="林华丽"});
persons.Add(new
Person{Age=10,Name="王二小"});
persons.Add(new
Person{Age=20,Name="刘德华"});
vltContext.Put("psersons",persons);
...........................
-------------------------test3.htm里面
#foreach($mr in $mingrens)
$mr
#end
//这就是对集合进行遍历然后输出的方法
----------------------------------------------------------
#foreach($mr in $mingrens)
$p.Name的年龄是$p.Age
#end
//这就是对集合进行遍历然后输出的方法
21、可以在NVelocity中用if else判断
#if($age>10)
大于10
#else
小于10
#end
----------------------------------
#foreach($p in $persons)
#if($p.Age>20)
- >$p.Name的年龄是$p.Age
#else
- >$p.Name的年龄是$p.Age
#end
#end
22、Nvelocity的包含,类似于母版页,所有的页面中都调用这个,包含头尾,和母版一样用。
--------------------------------head.htm
DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>title>
head>
<body>
<p><h1>欢迎光临$ageh1>p>
#if($age>30)
hahaha
#end
-------------------------------foot.htm
#if($age<10)
hahaha
#end
>本网站版权所有$agep>
body>
html>
-------------------------------test3.htm
#include("head.htm");
....................
#include("foot.htm");
-------------------------------guanggao.htm可以加个广告,不光是头尾
href="http://www.baidu.com">点击加载
#include("guanggao.htm");
************************************************************************************
除了include还有个叫parse可以将include替换掉,作用和效果是一样的,但是有区别。
include元素只是把页面内容包含进来,并不会解析其中的Nvelocity元素,而parse会解析其中的元素
也就是说早head.htm或者foot.htm中加入$p.name不会include不会解析,parse会解析
23、对Nvelocity进行封装
用C#中提供的匿名类来解决这个问题
----------------------------------------displayNews.htm
$title
作者:$author;发布日期:$postdate
$msg
---------------------------------------DisplayNews.ashx
vltContext.Put("title","sfdsds");
vltContext.Put("author","sfdsds");
vltContext.Put("person","sfdsds");
vltContext.Put("age","sfdsds");//这样要put四个变量
******************************************怎么解决
$data.Title
作者:$data.Tuthor;发布日期:$data.Tostdate
$data.Msg
-----------------------------------定义匿名类//所谓的匿名类其实就是编译器自动帮你生成的一
个类,其实还是一个正常的类
var
news=new{Tile="特大喜讯",Author="刘德华",PoseDate="2013-11-08",Msg="今晚上会公布喜讯
细节!"};//把类的定义和对象的声明初始化放到一起
string
s=news.PostDate;//News是累的一个对象,一个类既然继承object那么直接可以点出来了
匿名类的好处是,随new随用,用完就扔了
vltContext.Put("data",news);//把匿名类的对象放进去
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/html";
VelocityEngine vltEngine = new VelocityEngine();
vltEngine.SetProperty(RuntimeConstants.RESOURCE_LOADER, "file");
vltEngine.SetProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH,System.Web.Hosting.HostingEnvironment.MapPath("~/templates"));
//模板文件所在的文件夹
vltEngine.Init();
//把类的定义和对象的声明初始化放到一起
//匿名类
var news = new { Title = "特大喜讯",Author="杨中科",PostDate="2013-11-08",Msg="今天晚上会公布喜讯细节!" };
string s = news.PostDate;
VelocityContext vltContext = new VelocityContext();
vltContext.Put("data", news);
Template vltTemplate = vltEngine.GetTemplate("displayNews1.htm");
System.IO.StringWriter vltWriter = new System.IO.StringWriter();
vltTemplate.Merge(vltContext, vltWriter);
string html = vltWriter.GetStringBuilder().ToString();
context.Response.Write(html);
}
也可以定义一个Nvelocity类简化代码:
public static string RenderHtml(string name, object data)
{
VelocityEngine vltEngine = new VelocityEngine();
vltEngine.SetProperty(RuntimeConstants.RESOURCE_LOADER, "file");
vltEngine.SetProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, System.Web.Hosting.HostingEnvironment.MapPath("~/templates"));//模板文件所在的文件夹
vltEngine.Init();
VelocityContext vltContext = new VelocityContext();
vltContext.Put("Model", data);//设置参数,在模板中可以通过$data来引用
Template vltTemplate = vltEngine.GetTemplate(name);
System.IO.StringWriter vltWriter = new System.IO.StringWriter();
vltTemplate.Merge(vltContext, vltWriter);
return vltWriter.GetStringBuilder().ToString();
}
ASP.NET 一般处理程序基础2(Nvelocity模板引擎用法),布布扣,bubuko.com