您的位置:首页 > 编程语言 > ASP

不拖控件的ASP.NET之三-模板引擎

2014-04-06 11:14 381 查看
Login.ashx

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NVelocity.App;
using NVelocity.Runtime;
using NVelocity;

namespace webapp_test1
{
/// <summary>
/// Login 的摘要说明
/// </summary>
public class Login : IHttpHandler
{

public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/html";
string username = context.Request["username"];
string password = context.Request["password"];
int age = 30;
Person gwt = new Person();
gwt.name = "gwt";
gwt.age = 22;
Person gsx = new Person();
gsx.name = "gsx";
gsx.age = 58;
gwt.father = gsx;
Dictionary<string, string> dict = new Dictionary<string, string>();
dict["Jack"] = "SCUT";
dict["Mars"] = "Havard";
dict["Micheal"] = "Oxford";

Person[] ps = new Person[3];
ps[0] = new Person(); ps[0].name = "Jack"; ps[0].age = 1;
ps[1] = new Person(); ps[1].name = "Mars"; ps[1].age = 2;
ps[2] = new Person(); ps[2].name = "Micheal"; ps[2].age = 3;

if (string.IsNullOrEmpty(username) && string.IsNullOrEmpty(password))
{
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("username", "");//设置参数,在模板中可以通过$data来引用
vltContext.Put("password", "");
vltContext.Put("msg", "");

vltContext.Put("gwt", gwt);
vltContext.Put("ps", ps);
vltContext.Put("dict", dict);
vltContext.Put("age", age);

Template vltTemplate = vltEngine.GetTemplate("Login.htm");
System.IO.StringWriter vltWriter = new System.IO.StringWriter();
vltTemplate.Merge(vltContext, vltWriter);

string html = vltWriter.GetStringBuilder().ToString();
context.Response.Write(html);
}
else
{
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("username", username);//设置参数,在模板中可以通过$data来引用
vltContext.Put("password", password);
vltContext.Put("msg", "登陆失败");

vltContext.Put("gwt", gwt);
vltContext.Put("ps", ps);
vltContext.Put("dict", dict);

Template vltTemplate = vltEngine.GetTemplate("Login.htm");
System.IO.StringWriter vltWriter = new System.IO.StringWriter();
vltTemplate.Merge(vltContext, vltWriter);

string html = vltWriter.GetStringBuilder().ToString();
context.Response.Write(html);
}
}

public bool IsReusable
{
get
{
return false;
}
}
}
}


Person.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace webapp_test1
{
public class Person
{
public string name {get; set;} // 标明set和get方法
public int age { get; set; }

public Person father {get;set;}
}
}


/templates/Login.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>
<form action='Login.ashx' method='get'>
<input type='text' name="username" value="$username"/> </br>
<input type='text' name="password" value="$password"/> </br>
<input type='submit' value="登陆" />
</form>
<p>$msg</p>
<p>my name is $gwt.name, and my age is $gwt.age</p>
<p>my father's name is $gwt.father.name</p>
<ul>
#foreach($person in $ps)
#if ($person.age > 2)
<li>$person.name</li>
#end
#end
</ul>
<p>$dict.Jack</p>
#if ($age > 10)
大于10
#end
</body>
</html>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: