不拖控件的ASP.NET之三-模板引擎
2014-04-06 11:14
381 查看
Login.ashx
Person.cs
/templates/Login.htm
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>
相关文章推荐
- Asp.net 2.0控件开发相关调试(JavaScript调试和自定义控件设计时调试)
- Asp.net控件开发学习笔记(五)---Asp.net客户端状态管理
- ASP.NET(C#)--Repeater中生成“序号”列&&给Repeater控件里添加序号的5种方法
- asp.net图表控件
- 在 ASP.NET Web 部件应用程序中使用服务器控件
- Asp.net Ajax 编程备忘录----细数28个服务器端控件
- Asp.net 2.0控件开发相关调试(JavaScript调试和自定义控件设计时调试)
- Asp.net中的JavaScript使用之三javaScript访问服务器控件
- 打造通用ASP.NET数据分页控件
- asp.net控件开发基础(1)
- 对ASP.NET 2.0下面的新控件的困惑
- ASP.NET+Ext Js4.0复选框控件的用法
- ASP.NET 上传控件 “Maximum request length exceeded” 异常
- Asp.Net Web控件 (二)(无间隙滚动控件)
- Asp.net中使用WEB编辑控件FCKEditor
- Asp.net 2.0 自定义控件开发专题[详细探讨页面状态(视图状态和控件状态)机制及其使用场景](示例代码下载)
- MSPlus WebControls For ASP.NET. (服务器端控件)
- Control Study -> Asp.net几个较复杂的显示数据控件(Repeater/DataList/DataGrid)用法 (示例代码下载)
- Asp.net控件开发学习笔记(六)----数据回传
- ASP.NET 2.0 Login控件使用技巧(二) - 角色管理