NVelocity 实现简单的留言板

留言版简单实现

-----------------------------------------------------------------------------------------------------------------------------------

项目截图:

1,新建留言板数据库:LiuYanbanDB

USE [LiuYanbanDB]
GO

/****** Object:  Table [dbo].[LiuYan]    Script Date: 2015/5/15 22:06:11 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[LiuYan](
    [id] [bigint] IDENTITY(1,1) NOT NULL,
    [Title] [nvarchar](250) NULL,
    [Message] [nvarchar](max) NULL,
    [NickName] [nvarchar](50) NULL,
    [IsAnonymous] [bit] NULL,
    [IPAddress] [nvarchar](18) NULL,
    [PostDate] [datetime] NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

ALTER TABLE [dbo].[LiuYan] ADD  CONSTRAINT [DF_LiuYan_PostDate]  DEFAULT (getdate()) FOR [PostDate]
GO

2,新建项目,添加 Head.html 和 Foot.html 作为所有页面的页头和页尾, 其他新建HTML页面,用#parse("Head.html")来调用

3,准备好 Nvelocity模板处理类:Common_Nvelocity.cs

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

namespace LiuYanban
{
    public class Common_Nvelocity
    {

        /// <summary>
        /// 通过NVelocity模板引擎,把Data数据参数中的数据传递到Template模板中
        /// </summary>
        /// <param name="TemplateName">模板页面名称</param>
        /// <param name="Data">参数数据</param>
        /// <returns>返回HTML直接渲染生成 页面</returns>
        public static string RenderHTML(string TemplateName, object Data)
        {

            //创建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("~/Templates"));  //指定模板文件所在文件夹
            vlEngine.Init(props);

            //模板中的数据的来源
            VelocityContext vltContext = new VelocityContext();
            vltContext.Put("data", Data);  //设置参数,在HTML模板中可以通过$Data读取数据

            //模板文件名
            Template VltTemp = vlEngine.GetTemplate(TemplateName);
            //合并模板
            StringWriter writer = new StringWriter();
            VltTemp.Merge(vltContext, writer);

            //转化为字符串
            string html = writer.GetStringBuilder().ToString();

            return html;
        }
    }
}

4,添加 新增留言处理程序和对应的HTML模板页面: MessageNew.ashx , MessageNew.html 实现新增留言功能

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

namespace LiuYanban
{
    /// <summary>
    /// MessageNew 的摘要说明
    /// </summary>
    public class MessageNew : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/HTML";
            string html = "";
            SQLHelper sqlH = new SQLHelper();

            string strButtonSave = context.Request["Save"];
            if (string.IsNullOrEmpty(strButtonSave))
            {
                var data = new { PageTitle = "请发表您的留言" };
                html = Common_Nvelocity.RenderHTML("MessageNew.html", data);
                context.Response.Write(html);
            }
            else
            {
                //  把留言提交
                string strTitle = context.Request["title"];
                string strMsg = context.Request["message"];
                string strNickName = context.Request["NickName"];
                bool FlagIsAnonymous = context.Request["IsAnonymous"] == "on";
                string strIPAddress = context.Request.UserHostAddress;

                //数据校验
                //写入数据库

                string sqlInsert = " insert into  [LiuYanbanDB].[dbo].[LiuYan]([Title],[Message],[NickName],[IsAnonymous],[IPAddress]) values(@Title,@Message,@NickName,@IsAnonymous,@IPAddress)";
                SqlParameter[] sqlParas = new SqlParameter[]{
                    new SqlParameter("@Title",strTitle),
                    new SqlParameter("@Message",strMsg),
                    new SqlParameter("@NickName",strNickName),
                    new SqlParameter("@IsAnonymous",FlagIsAnonymous),
                    new SqlParameter("@IPAddress",strIPAddress)
                };
                int numSucc = 0;
                numSucc = sqlH.ExecuteNonQuery(sqlInsert, sqlParas, CommandType.Text);

                if (numSucc == 1)
                {
                    context.Response.Redirect("MessageShow.ashx");
                }
                else
                {
                    context.Response.Write("留言失败");
                }
                //strReminder = "发表留言成功";
                //DataTable dt = sqlH.ExecuteQuery(sqlMsg, CommandType.Text);
                //var data = new { PageTitle = "发表您的留言", MsgList = dt.Rows, PageReminder = strReminder };
                //html = Common_Nvelocity.RenderHTML("MessageNew.html", data);
                //context.Response.Write(html);
            }

        }

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

#parse("Head.html")

<p>$data.PageTitle</p>
<form action="MessageNew.ashx" method="post">
    <table>

        <tbody>
            <tr>
                <td>昵称</td>
                <td>
                    <input name="NickName" /><input type="checkbox" name="IsAnonymous" /><lable for="IsAnonymous">匿名</lable></td>
            </tr>
            <tr>
                <td>标题</td>
                <td>
                    <input type="text" name="Title" /></td>
            </tr>
            <tr>
                <td>内容</td>
                <td>
                    <textarea cols="50" rows="5" name="Message"></textarea></td>
            </tr>
            <tr>
                <td></td>
                <td>
                    <input type="submit" name="Save" value="发表" /></td>
            </tr>
        </tbody>
    </table>

</form>

#parse("Foot.html")

5,添加 留言查看对应的处理程序和对应的HTML模板页面: MessageShow.ashx , MessageShow.html 实现显示留言列表

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

namespace LiuYanban
{
    /// <summary>
    /// MessageShow 的摘要说明
    /// </summary>
    public class MessageShow : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/html";

            SQLHelper sqlH = new SQLHelper();
            string sqlMsg = " select * FROM [LiuYanbanDB].[dbo].[LiuYan] order by PostDate desc";
            DataTable dt = sqlH.ExecuteQuery(sqlMsg, CommandType.Text);
            var data = new { PageTitle = "留言列表", MsgList = dt.Rows };
            string html = Common_Nvelocity.RenderHTML("MessageShow.html", data);
            context.Response.Write(html);
        }

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

#parse("Head.html")
<style type="text/css">
    table {
        border-collapse: collapse;
        border: none;
        width: 800px;
    }

    td {
        border: solid #000 1px;
    }
</style>
<h1>$data.PageTitle</h1>
<a href="MessageNew.ashx">新增留言</a><br />

<table>
    #foreach($Msg in $data.MsgList)
                <tr>
                    <td>昵称:</td>
                    <td>$Msg.NickName</td>
                    <td>发表时间:</td>
                    <td>$Msg.PostDate</td>
                    <td>IP地址:</td>
                    <td>$Msg.IPAddress</td>
                </tr>
    <tr>
        <td>留言标题:</td>
        <td colspan="5">$Msg.Title</td>
    </tr>
    <tr>
        <td>留言内容:</td>
        <td colspan="5">$Msg.Message</td>
    </tr>
    #end
</table>
#parse("Foot.html")

简单留言板Demo下载

时间: 2024-10-09 23:39:51

NVelocity 实现简单的留言板的相关文章

简单的留言板

制作一个简单的留言板,用户在输入框中输入内容,提交,然后内容显现在box里面 依然首先需要获取到输入框,提交按钮,box: 然后给提交按钮设置点击事件: 获取输入框的内容: 显示到box中 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> #box{

简单的留言板jquery

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head> <title></title> <meta http-equiv="content" content="text/html" char

用js做一个简单的留言板效果

html部分: 1: <!DOCTYPE> 2: <html lang="zh-en"> 3: <head> 4: <title>js实现简单留言板</title> 5: <meta http-equiv="content-type" content="text/html;charset=utf-8"> 6: <link rel="stylesheet&quo

使用JSP、Servlet实现一个简单的留言板

1 留言板的页面 messageBoard.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/htm

php+mysql 最简单的留言板

学完了记得动手操作. <html> <body> <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head> <form method = "post" action = "post.php"> 欢迎来到我的留言板!<br> name:&l

JS做简单的留言板

留言板实现功能: 1.把文本框里面的留言发表显示出来: 2.显示出来的留言右侧有一个删除链接或按钮 3.点击删除可以把本条留言删除. 为了防止链接跳转,把a的href改成了'javascript:;',注意有一个:哦! <textarea name="" id="text1" cols="30" rows="10"></textarea> <button>评论</button>

问题:关于一个贴友的js留言板的实现

需求:用js做一个简单的留言板效果 html部分: 1: <!DOCTYPE> 2: <html lang="zh-en"> 3: <head> 4: <title>js实现简单留言板</title> 5: <meta http-equiv="content-type" content="text/html;charset=utf-8"> 6: <link rel=&q

Repeater+AspNetPager+Ajax留言板

最近想要巩固下基础知识,于是写了一个比较简单易懂实用的留言板. 部分样式参考了CSDN(貌似最近一直很火),部分源码参照了Alexis. 主要结构: 1.前期准备 2.Repeater+AspNetPager分页效果 3.Ajax无刷新留言板,插入和删除留言 4.自定义编号 5.总结 先上效果图:(PS:美工很一般) 1.前期准备: 1.数据库:自增ID,用户名,留言内容,用户头像,留言时间. 2.实体类:对应数据库的字段 3.数据访问层: 2.Repeater+AspNetPager分页效果

LocalStorage 本地存储 做一个简单留言板

二话不说,先上代码: 1 <body> 2 <div><textarea id="trCon" cols="30" rows="10"></textarea></div> 3 <div><input type="button" value="发表" onclick="PostCon()"><inpu