webfrom-横贯四方-05-评论
1 页面效果如下:

2 在模板中进行修改
<!DOCTYPE html> <!--商品详细页布局--> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> <link href="/Css/tableStyle.css" rel="stylesheet" /> <script src="/js/jquery-1.7.1.js"></script> <!--在模板文件中引用外部文件时,一定要使用绝对路径--> <script type="text/javascript"> $(function () { $("#btnAdd").click(function () { addComment(); }); loadComment(); }); function loadComment() { $.post("/ashx/BookComment.ashx", { "action": "load", "bookID": $bookID }, function (data) { var serverDate = $.parseJSON(data); var serverDataLength = serverDate.length; for (var i = 0; i < serverDataLength;i++ ){ $("<li>" + serverDate[i].CreateDateTime + ";" + serverDate[i].Msg + "</li>").appendTo("#commentList"); } }); } //添加评论 function addComment() { var msg = $("#txtContent").val(); if (msg != "") { $.post("/ashx/BookComment.ashx", {"action":"add", "msg": msg, "bookID": $bookID }, function (data) { if (data = "ok") { $("#txtContent").val(""); $("#txtContent").focus(); $("#commentList").empty(); loadComment(); } else { $("#txtMsg").text("评论发表失败 !"); } }); } else { $("#txtMsg").text("评论内容不能为空!"); $("#txtContent").focus(); } } </script> </head> <body> <table> <tr> <td>书名</td><td>$title</td> </tr> <tr> <td>作者</td> <td>$author</td> </tr> <tr> <td>单价</td> <td>$unitprice</td> </tr> <tr> <td>封面</td> <td><img src="/Images/BookCovers/$isbn.jpg" /></td> </tr> <tr> <td>简介</td> <td>$Content</td> </tr> </table> <hr /> <ul id="commentList"></ul> <br /> <textarea id="txtContent" rows="20" cols="100" placeholder="请输入评论"></textarea> <br /> <input type="button" value="发布评论" id="btnAdd" /> <span id="txtMsg" style="font-size:14px;color:red"></span> </body> </html>
using BookShopManager.Web.Common; using BookShopManager.Web.ViewModel; using Common; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Script.Serialization; namespace BookShopManager.Web.Ashx { /// <summary> /// BookComment 的摘要说明 /// </summary> public class BookComment : IHttpHandler { BLL.BookComment bll = new BLL.BookComment(); public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; string action = context.Request["action"]; if (action == "add") { AddComment(context); } else if (action == "load") { LoadComment(context); } else { context.Response.Write("参数错误!"); } } /// <summary> /// 加载评论 /// </summary> /// <param name="context"></param> private void LoadComment(HttpContext context) { int bookId = ConvertHelper.ToInt(context.Request["bookID"]); List<Model.BookComment> list = bll.GetModelList(" BookId="+bookId); List<BookCommentViewModel> newList = new List<BookCommentViewModel>(); foreach (Model.BookComment item in list) { BookCommentViewModel viewModel = new BookCommentViewModel (); TimeSpan ts = DateTime.Now - item.CreateDateTime; viewModel.CreateDateTime = TimeSpanHelper.GetTimeSpan(ts); viewModel.Msg = item.Msg; newList.Add(viewModel); } JavaScriptSerializer js = new JavaScriptSerializer(); context.Response.Write(js.Serialize(newList)); } /// <summary> /// 添加评论 /// </summary> /// <param name="context"></param> private void AddComment(HttpContext context) { Model.BookComment bookComment = new Model.BookComment(); bookComment.BookId = ConvertHelper.ToInt(context.Request["bookID"]); bookComment.Msg = context.Request["msg"]; bookComment.CreateDateTime = DateTime.Now; if (bll.Add(bookComment)>0) { context.Response.Write("ok"); } else { context.Response.Write("no"); } } public bool IsReusable { get { return false; } } } }
3 将时间转为时间差(两分钟前)
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace BookShopManager.Web.ViewModel { public class BookCommentViewModel { public string CreateDateTime { get; set; } public string Msg { get; set; } } }
using System; using System.Collections.Generic; using System.Text; namespace Common { public static class TimeSpanHelper { public static string GetTimeSpan(TimeSpan ts) { if (ts.TotalDays>=365) { return Math.Floor(ts.TotalDays/365)+"年前"; } if (ts.TotalDays >= 30) { return Math.Floor(ts.TotalDays / 30) + "月前"; } if (ts.TotalHours >= 24) { return Math.Floor(ts.TotalDays) + "天前"; } if (ts.TotalHours >= 1) { return Math.Floor(ts.TotalHours) + "小时前"; } if (ts.TotalMinutes >= 1) { return Math.Floor(ts.TotalMinutes) + "分钟前"; } return "刚刚"; } } }
4 词语过滤

4.1 模板页,注意addComment方法
<!DOCTYPE html> <!--商品详细页布局--> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <meta content="北京市新华书店王府井书店,致力于提供专业化购书服务.网上购书选择新华书店王府井书店(网上书店),购书放心有保障.王府井书店电话:010-65132842.010-65252592" name="description" /> <meta content="王府井书店 新华书店 网上书店 网上购书 北京图书大厦" name="keywords" /> <link href="/Css/tableStyle.css" rel="stylesheet" /> <link href="/Css/index.css" rel="stylesheet" /> <script src="/js/jquery-1.7.1.js"></script> <script src="/ckeditor/ckeditor.js"></script> <style type="text/css"> .itcast_comments { width: 620px; color: #333; font: normal 12px/24px Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; } .reply_btn { font-size: 14px; background: #cc0000; padding: 8px 15px; border: none; color: #fff; cursor: pointer; font: "Microsoft YaHei"; font-weight: bold; } .reply_box { border: 1px solid #CCC; font-size: 14px; } </style> <!--在模板文件中引用外部文件时,一定要使用绝对路径--> <script type="text/javascript"> $(function () { $("#btnAdd").click(function () { addComment(); }); loadComment(); }); function loadComment() { $.post("/ashx/BookComment.ashx", { "action": "load", "bookID": $bookID }, function (data) { var serverDate = $.parseJSON(data); var serverDataLength = serverDate.length; for (var i = 0; i < serverDataLength; i++) { $("<li>" + serverDate[i].CreateDateTime + ";" + serverDate[i].Msg + "</li>").appendTo("#commentList"); } }); } //添加评论 function addComment() { var msg = $("#txtContent").val(); if (msg != "") { $.post("/ashx/BookComment.ashx", { "action": "add", "msg": msg, "bookID": $bookID }, function (data) { var serverData = data.split(':'); if (serverData[0] == "ok") { $("#txtContent").val(""); $("#txtContent").focus(); $("#commentList").empty(); loadComment(); $("#txtMsg").text(serverData[1]); } else { $("#txtMsg").text(serverData[1]); } }); } else { $("#txtMsg").text("评论内容不能为空!"); $("#txtContent").focus(); } } </script> </head> <body> <center> <div class="top"> <div class="m_c" style="width: 736px; height: 27px"> <span class="l"> <a href="http://www.beifabook.com" target="_blank">北发图书网主网站</a> | <a href="http://www.bjbb.com" target="_blank">北京图书大厦</a> | <a href="../default.aspx" target="_blank"><font color="#00A0E9">王府井书店</font></a> | <a href="http://www.zgcbb.com/" target="_blank">中关村图书大厦</a> | <a href="http://www.yycbook.com/" target="_blank">亚运村图书大厦</a> | <a href="http://www.hs-book.com" target="_blank">花市书店</a> | <a href="/OrderInfo.aspx">我的订单</a> </span> </div> </div> <div style="WIDTH: 750px; text-align: left;"> <img src="/images/集团网站1.jpg" width="780" height="93" /><br /> </div> </center> <table> <tr> <td>书名</td> <td>$title</td> </tr> <tr> <td>作者</td> <td>$author</td> </tr> <tr> <td>单价</td> <td>$unitprice</td> </tr> <tr> <td>封面</td> <td><img src="/Images/BookCovers/$isbn.jpg" /></td> </tr> <tr> <td>简介</td> <td>$Content</td> </tr> </table> <hr /> <ul id="commentList"></ul> <br /> <textarea id="txtContent" rows="20" cols="100" placeholder="请输入评论"></textarea> <br /> <input type="button" value="发布评论" id="btnAdd" /> <span id="txtMsg" style="font-size:14px;color:red"></span> <div id="footer"> <table border="0" width="100%" class="categories1"> <tr> <td align="center"> <ul> <li><a href='#'>关于我们王府井书店</li> <li><a href="#">书店营业时间:9:30-21:00 </a> </li> <li> <a href="#" ; target=_blank;><img src="/images/logo123x40.jpg" width="123" height="40" border="0"></a> <a href="#" ; target=_blank;><img border="0" src="/Images/kaixin.jpg"></a> </li> <li> <span lang="zh-cn"><a title="京ICP备08001692号" href="http://www.miibeian.gov.cn">京ICP备08987373号</a></span> </li> </ul> </td> </tr> </table> </div> </body> </html>
4.2 注意AddComment方法
using BookShopManager.Web.Common; using BookShopManager.Web.ViewModel; using Common; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Script.Serialization; namespace BookShopManager.Web.Ashx { /// <summary> /// BookComment 的摘要说明 /// </summary> public class BookComment : IHttpHandler { BLL.BookComment bllBookComment = new BLL.BookComment(); BLL.Articel_Words bllArticel_Words = new BLL.Articel_Words(); public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; string action = context.Request["action"]; if (action == "add") { AddComment(context); } else if (action == "load") { LoadComment(context); } else { context.Response.Write("参数错误!"); } } /// <summary> /// 加载评论 /// </summary> /// <param name="context"></param> private void LoadComment(HttpContext context) { int bookId = ConvertHelper.ToInt(context.Request["bookID"]); List<Model.BookComment> list = bllBookComment.GetModelList(" BookId="+bookId+" And IsPass=1"); List<BookCommentViewModel> newList = new List<BookCommentViewModel>(); foreach (Model.BookComment item in list) { BookCommentViewModel viewModel = new BookCommentViewModel (); TimeSpan ts = DateTime.Now - item.CreateDateTime; viewModel.CreateDateTime = TimeSpanHelper.GetTimeSpan(ts); viewModel.Msg = item.Msg; newList.Add(viewModel); } JavaScriptSerializer js = new JavaScriptSerializer(); context.Response.Write(js.Serialize(newList)); } /// <summary> /// 添加评论 /// </summary> /// <param name="context"></param> private void AddComment(HttpContext context) { Model.BookComment bookComment = new Model.BookComment(); bookComment.BookId = ConvertHelper.ToInt(context.Request["bookID"]); string msg= context.Request["msg"]; //判断是否含有"禁用词" if (bllArticel_Words.CheckForbid(msg)) { context.Response.Write("no:评论中包含禁用词"); return; } bool isPass = false; //判断是否含有"审查词" if (bllArticel_Words.CheckModWord(msg)) { isPass = false; } else { isPass = true; bookComment.IsPass = true; } //判断是否含有替换词 msg = bllArticel_Words.CheckReplaceWord(msg); bookComment.Msg = msg; bookComment.CreateDateTime = DateTime.Now; if (bllBookComment.Add(bookComment)>0) { if (!isPass) { context.Response.Write("ok:评论成功,但评论中包含审查词,需要管理员审查通过后才能显示"); } else { context.Response.Write("ok:评论成功!"); } } else { context.Response.Write("no:评论失败!"); } } public bool IsReusable { get { return false; } } } }
4.3 BLL层
using System; using System.Data; using System.Collections.Generic; using Maticsoft.Common; using BookShopManager.Model; using System.Text.RegularExpressions; namespace BookShopManager.BLL { /// <summary> /// Articel_Words /// </summary> public partial class Articel_Words { public bool Insert(Model.Articel_Words model) { return dal.Insert(model) > 0; } public bool CheckForbid(string msg) { List<string> list = dal.GetForbidWord();//获取所有禁用词 string regex = string.Join("|", list.ToArray()); return Regex.IsMatch(msg, regex); } public bool CheckModWord(string msg) { List<string> list = dal.GetModWord();//获取所有审查 string regex = string.Join("|", list.ToArray()); regex = regex.Replace(@"\",@"\\"); regex = regex.Replace(@"{2}",".{0,2}"); return Regex.IsMatch(msg, regex); } public string CheckReplaceWord(string msg) { List<Model.Articel_Words> list = dal.GetReplaceWord();//获取所有替换 foreach (Model.Articel_Words model in list) { msg = msg.Replace(model.WordPattern,model.ReplaceWord); } return msg; } } }
4.4 DAL层
using System; using System.Data; using System.Text; using System.Data.SqlClient; using Maticsoft.DBUtility; using System.Collections.Generic;//Please add references namespace BookShopManager.DAL { /// <summary> /// 数据访问类:Articel_Words /// </summary> public partial class Articel_Words { public int Insert(Model.Articel_Words model) { string sql = "insert into Articel_Words (WordPattern,IsForbid,IsMod,ReplaceWord) values (@WordPattern,@IsForbid,@IsMod,@ReplaceWord)"; SqlParameter[] parameters = { new SqlParameter("@WordPattern", SqlDbType.NVarChar,50), new SqlParameter("@IsForbid", SqlDbType.Bit,1), new SqlParameter("@IsMod", SqlDbType.Bit,1), new SqlParameter("@ReplaceWord", SqlDbType.NVarChar,50)}; parameters[0].Value = model.WordPattern; parameters[1].Value = model.IsForbid; parameters[2].Value = model.IsMod; parameters[3].Value = model.ReplaceWord; return DbHelperSQL.ExecuteSql(sql, parameters); } //获取禁用 public List<String> GetForbidWord() { string sql = "select WordPattern from Articel_Words where IsForbid=1;"; List<String> list = new List<string>(); using (SqlDataReader dr = DbHelperSQL.ExecuteReader(sql)) { if (dr.HasRows) { while (dr.Read()) { list.Add(dr["WordPattern"].ToString()); } } } return list; } //获取"审查词" public List<String> GetModWord() { string sql = "select WordPattern from Articel_Words where IsMod=1;"; List<String> list = new List<string>(); using (SqlDataReader dr = DbHelperSQL.ExecuteReader(sql)) { if (dr.HasRows) { while (dr.Read()) { list.Add(dr["WordPattern"].ToString()); } } } return list; } //获取"替换词" public List<Model.Articel_Words> GetReplaceWord() { string sql = "select WordPattern,ReplaceWord from Articel_Words where IsForbid=0 and IsMod=0;"; List<Model.Articel_Words> list = new List<Model.Articel_Words>(); using (SqlDataReader dr = DbHelperSQL.ExecuteReader(sql)) { if (dr.HasRows) { while (dr.Read()) { Model.Articel_Words model = new Model.Articel_Words(); model.WordPattern = dr["WordPattern"].ToString(); model.ReplaceWord = dr["ReplaceWord"].ToString(); list.Add(model); } } } return list; } } }

浙公网安备 33010602011771号