1,HTML的Form表单数据按Button提交数据以后,提交到 Action 指定的服务器端处理程序(.ashx)进行处理后 ,再响应的浏览器。
2,我们把 HTML的表单,写到 .ashx 一般处理程序页面中,这样就一般处理程序页面就可以显示 Form表单登陆,并且可以处理是否登陆成功的逻辑部分,前台显示和后天业务逻辑整合到了一起,如下:
public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/html"; //渲染一个Form表单 context.Response.Write("<html>"); context.Response.Write("<head>一般处理程序登陆页面</head><body><form action=‘login.ashx‘ action=‘get‘><br/><br/>"); // context.Response.Write("用户名:<input type=‘text‘ name=‘UserName‘ /><br/>"); context.Response.Write("密码:<input type=‘password‘ name=‘Pwd‘ /><br/>"); context.Response.Write("提交:<input type=‘submit‘ /><br/>"); string strUserName = context.Request.QueryString["UserName"]; string strPwd = context.Request.QueryString["Pwd"]; if (string.IsNullOrEmpty(strUserName) == false) //登陆名不为空的时候,检查密码是否正确 { if (strUserName == "admin" && strPwd == "123") { context.Response.Write("恭喜您,登陆成功"); } else { context.Response.Write("登陆失败"); } } }
但是这样去做,网页表单 只有通过这种修改 .ashx一般处理程序的方法去修改。
没法给前天美工可以处理的地方,另外如果后天业务逻辑复杂的话,这样的整合就更复杂了。
3,如果有一个文件 又可以区分前台显示和后台业务逻辑 这样就好了
4,nVelocity是一个基于.NET的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由.NET代码定义的对象
5, nVelocity,下载网址:NVelocity - A .Net Template Engine ,下载后把 dll文件放到项目中,然后 引用添加对dll的引用,注意对应的 .NET Framework版本
6, Login_NVelocity.html和Login_NVelocity.ashx代代码分别如下:
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>一般处理程序登陆页面</title> </head> <body> <form action="Login_NVelocity.ashx" method="get"> 用户名:<input type="text" name="UserName" value="$name" /><br /> 密码:<input type="password" name="password" value="$pwd" /><br /> 提交:<input type="submit" /><br /> <p>$message</p> </form> </body> </html>
Login_NVelocity.ashx : 一般处理程序页面实现了对HTML模板页面中变量的控制 $name, $pwd,$message
using System; using System.Collections.Generic; using System.Linq; using System.Web; using NVelocity; using NVelocity.App; using Commons.Collections; using NVelocity.Runtime; using System.IO; namespace HttpHandler { /// <summary> /// LoginNVelocity 的摘要说明 /// </summary> public class LoginNVelocity : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/html"; string strUserName = context.Request["username"]; string strPwd = context.Request["password"]; string strMsg = context.Request["message"]; string strHtml = ""; if (string.IsNullOrEmpty(strUserName) && string.IsNullOrEmpty(strPwd)) { strHtml = Template_Nvelocity("", "", ""); } else if (strUserName == "admin" && strPwd == "123") { strMsg = "恭喜您,登陆成功!"; context.Response.Write(strMsg); } else { strMsg = "登陆失败,用户名或者密码错误"; strHtml = Template_Nvelocity(strUserName, strPwd, strMsg); } //输出 context.Response.Write(strHtml); } //模板引擎方法,传递 登录名、登陆密码、登陆是否成功 这三个变量 public string Template_Nvelocity(string strUserName, string strPwd, string strMsg) { //创建NVlecocity模板引擎的实例对象 VelocityEngine vlEngine = new VelocityEngine(); //初始化实例对象,定义对象的部分属性 ExtendedProperties props = new ExtendedProperties(); props.AddProperty(RuntimeConstants.RESOURCE_LOADER, "file");//声明模板是在file中 props.AddProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, System.Web.Hosting.HostingEnvironment.MapPath("~/")); //指定模板文件所在文件夹 vlEngine.Init(props); //替换模板中的数据 VelocityContext vltContext = new VelocityContext(); //vltContext.Put("data", data); //设置参数,在模板中可以通过$Data读取数据 vltContext.Put("name", strUserName); vltContext.Put("pwd", strPwd); vltContext.Put("message", strMsg); //从文件中读取模板 Template VltTemp = vlEngine.GetTemplate("Login_NVelocity.html"); //合并模板 StringWriter writer = new StringWriter(); VltTemp.Merge(vltContext, writer); //转化为字符串 string html = writer.GetStringBuilder().ToString(); return html; } public bool IsReusable { get { return false; } } } }
附件: NVelocity DLL
时间: 2024-10-08 03:30:03