留言版简单实现

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

项目截图:

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(,) NOT NULL,
[Title] [nvarchar]() NULL,
[Message] [nvarchar](max) NULL,
[NickName] [nvarchar]() NULL,
[IsAnonymous] [bit] NULL,
[IPAddress] [nvarchar]() 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 = ;
numSucc = sqlH.ExecuteNonQuery(sqlInsert, sqlParas, CommandType.Text); if (numSucc == )
{
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="" rows="" 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 # 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="">$Msg.Title</td>
</tr>
<tr>
<td>留言内容:</td>
<td colspan="">$Msg.Message</td>
</tr>
#end
</table>
#parse("Foot.html")

简单留言板Demo下载

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

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

    html部分: 1: <!DOCTYPE> 2: <html lang="zh-en"> 3: <head> 4: <title>j ...

  2. 用 Express4 写一个简单的留言板

    Knowledge Dependence:阅读文本前,你需要熟悉 Node.js 编程.Express 以及相关工具和常用中间件的使用. Node.js 以其单线程异步非阻塞的特点,越来越被广大的 W ...

  3. javaScript简单的留言板

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  4. php+mysql 最简单的留言板

    学完了记得动手操作. 測试地址(未过滤) <html> <body> <head><meta http-equiv="Content-Type&qu ...

  5. 简单的留言板(dom+正则练习)

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  6. vue2 简单的留言板

    没有写样式,只是写个功能 <template> <div class="headers"> <div class="form"&g ...

  7. 一个很简单的php留言板。。。。搭建在sae上的。。。

    我在sae上搭建了一个个人简历的页面: 有兴趣的可以访问  http://671coder.sinaapp.com/ 在做下面一个简单的留言板的时候,卡了我很久,虽然完全没用过php..但是还是最后勉 ...

  8. PHP实现简单留言板

    最近学习了下PHP基础,这里做一个简单的留言板,算是对PHP和MySQL的使用做一个整体的练习吧,不遇到问题总感觉学不到东西. 截图如下: 总结: 1>数据库的简单操作,数据库的增删改查: 2. ...

  9. 写一个简单的HTML留言板

    最近有点懒,没码什么字,防止遗忘,从头开始码,写一个简单的HTML留言板.包含两个文件,book.html还有style.css,放在同一目录下. book.html 1 <!DOCTYPE h ...

随机推荐

  1. [iOS 多线程 & 网络 - 2.0] - 发送接收 服务器信息

    A.搭建java服务器 使用eclipse.tomcat和struts2框架搭建一个简单的服务器 1.准备好合适版本的JDK.eclipse EE.tomcat.struts2 框架包 2.配置JDK ...

  2. UVaLive 6627 First Date (转换时间)

    题意:给定两个日期,两种不同算闰年的方法,导致日期不同,给定那个慢的,求你求了那个快的. 析:因为算闰年的方法不同,所以我们就要先从1582算到当前时间,算出差了多少天,再加上就好.注意跨月,跨年的情 ...

  3. POJ 3666 Making the Grade (DP)

    题意:输入N, 然后输入N个数,求最小的改动这些数使之成非严格递增即可,要是非严格递减,反过来再求一下就可以了. 析:并不会做,知道是DP,但就是不会,菜....d[i][j]表示前 i 个数中,最大 ...

  4. this指针和m_hWnd的区别

    m_hWnd ① m_hWnd这个成员变量,最早是定义在类CWnd中,而且是类CWnd的第一个数据成员, 先看一下MSDN的解析: The handle of the Windows window a ...

  5. UI进阶 KVO

    KVO:(Key-Value-Observer)键值观察者,是观察者设计模式的一种具体实现 KVO触发机制:一个对象(观察者),监测另一对象(被观察者)的某属性是否发生变化,若被监测的属性发生的更改, ...

  6. Random的nextInt用法

    因为想当然的认为Random类中nextInt()(注:不带参数),会产生伪随机的正整数,采用如下的方式生成0~99之间的随机数: Random random = new Random(); rand ...

  7. kettle内存溢出

    ETL工具kettle,在老版设计后,使用新版时,居然发生了内存溢出的错误: 出现: java heap 或者 OutOfMemory等字样 这是kettle分配的内存不足. 在kettle的运行路径 ...

  8. Linux 下监控用户最大进程数参数(nproc)是否到达上限

    Linux 下监控用户最大进程数参数(nproc)是否到达上限的步骤: 1.查看各系统用户的进程(LWP)数: 注意:默认情况下采用 ps 命令并不能显示出所有的进程.因为 Linux 环境下执行多线 ...

  9. CSS基础(02)

    CSS 选择器 1.CSS3 选择器简介 在 CSS 中,选择器是一种模式,用于选择需要添加样式的元素. 语法: 下面中"CSS" 列指示该属性是在哪个 CSS 版本中定义的.(C ...

  10. 文件映射spring 使用classpath方式加载hibernate映射文件

    在改章节中,我们主要介绍文件映射的内容,自我感觉有个不错的建议和大家分享下 <!-- 批量指定到classpath下面 --> <property name="mappin ...