ASP.NET 模板引擎 - NVelocity

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 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。