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;
            }
        }
    }
}
BookComment

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; }
    }
}
BookCommentViewModel
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 "刚刚";
        }
    }
}
TimeSpanHelper

 

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> |&nbsp;
                    <a href="http://www.bjbb.com" target="_blank">北京图书大厦</a>&nbsp; |
                    <a href="../default.aspx" target="_blank"><font color="#00A0E9">王府井书店</font></a>&nbsp;|
                    <a href="http://www.zgcbb.com/" target="_blank">中关村图书大厦</a>&nbsp; |
                    <a href="http://www.yycbook.com/" target="_blank">亚运村图书大厦</a>&nbsp; |
                    <a href="http://www.hs-book.com" target="_blank">花市书店</a>&nbsp; |
                    <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 />
            &nbsp;&nbsp;&nbsp;&nbsp;
        </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="#">书店营业时间:930-2100 </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>&nbsp;<span lang="zh-cn"><a title="京ICP备08001692号" href="http://www.miibeian.gov.cn">京ICP备08987373号</a></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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;
            }
        }
    }
}
BookComment

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;
        }
    }
}
BLL Articel_Words

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;
        }
    }
}
DAL

 

posted @ 2017-09-23 17:12  逍遥小天狼  阅读(213)  评论(0)    收藏  举报