知识点:生成静态页面。添加评论
图书商城项目-四-1
知识点:生成静态页面。添加评论
静态页面的生成
- 静态页面的好处:加载速度快,减轻数据库压力
- 静态页面的劣势(在什么情况下用比较好):经常访问的页面,但是不是经常修改的
如何生产静态页面?就跟之前我们一开始那种替换模板再加载一个道理,要注意的是你引用的css,js之类的相对于模板文件是正确的,但是对于生成的静态文件页就不一定是对的了
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <!DOCTYPE html> <html> <head> <link href="/Css/tableStyle.css" rel="stylesheet" />//注意这里 <meta charset="utf-8" /> <title></title> </head> <body> <table> <tr><td>标题</td><td>$Title</td></tr> <tr><td>作者</td><td>$Author</td></tr> </table> </body> </html>
|
业务层
1 2 3 4 5 6 7 8 9 10 11
| public void CreatStaticPage(int id) { Book book= dal.GetModel(id); string module = File.ReadAllText(HttpContext.Current.Request.MapPath("/StaticHtmlModle/StaticHtmlMdole.html")); module = module.Replace("$Title", book.Title).Replace("$Author", book.Author); string dic = "/StaticHtml/" + book.PublishDate.Year + "/" + book.PublishDate.Month + "/" +book.PublishDate.Day + "/"; Directory.CreateDirectory(Path.GetDirectoryName(HttpContext.Current.Request.MapPath(dic))); string filePath = dic +book.Id +".html"; File.WriteAllText(HttpContext.Current.Request.MapPath(filePath),module,Encoding.UTF8);
}
|
此外链接到具体页面的方法
后端
1 2 3 4 5 6
| public string LinkDetail(object obj) { DateTime dt = Convert.ToDateTime(obj); return "/StaticHtml/" + dt.Year + "/" + dt.Month + "/" + dt.Day + "/"; }
|
前端处理
1
| href="<%# LinkDetail(Eval("PublishDate")) %><%#Eval("Id") %>.html" target="_blank"
|
添加评论
现在而言通常添加评论功能可以直接买别人做好的,项目中我们做个简单的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| <script type="text/javascript"> $(function() { $("#sumitText").click(function() { SumitMsg(); }); LoadCommon(); }); function LoadCommon() { $.post("/ashx/BoolComment.ashx", { "BookId": $BooKId, "Action": "load" }, function(data) { var json = $.parseJSON(data); var length = json.length; for (var i = 0; i < length; i++) { $("<li>" + json[i].CreatDateTime + ":" + json[i].Msg + "</li>").appendTo("#commonList"); } }); } function SumitMsg() { var msg = $("#textArea").val(); $("#textArea").val(""); if (msg != "") { $.post("/ashx/BoolComment.ashx", { "Msg": msg, "BookId": $BooKId, "Action": "add"}, function(data) { if (data == "ok") { $("#commonList").empty(); LoadCommon(); } else { $("#txtMsg").text("评论发表失败"); $("#textArea").focus(); } }); } else { $("#txtMsg").text("评论内容不能为空"); $("#textArea").focus(); } } </script>
|
后端
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| private void LoadCommon(HttpContext context) { List<BookComment> list = bll.GetModelList("BookId=" + context.Request["BookId"]); List<BookCommentViewModle> newList = new List<BookCommentViewModle>(); foreach (BookComment bookComment in list) { BookCommentViewModle modle = new BookCommentViewModle(); modle.Msg = bookComment.Msg; TimeSpan time = DateTime.Now - bookComment.CreateDateTime; modle.SpanTime = WebCommon.GetSpanTime(time); newList.Add(modle); } JavaScriptSerializer js = new JavaScriptSerializer(); context.Response.Write(js.Serialize(newList)); }
private void AddCommon(HttpContext context) { string msg = context.Request["Msg"]; string bookid = context.Request["BookId"]; Model.BookComment bookComment = new BookComment(); bookComment.BookId = Convert.ToInt32(bookid); bookComment.CreateDateTime = DateTime.Now; bookComment.Msg = msg; if (bll.Add(bookComment) > 0) { context.Response.Write("ok"); } else { context.Response.Write("no"); } }
|
上面的处理评论时间,简单就是用现在事件减去数据库的创建时间,可以先声明一个方法来处理返回的结果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| public static string GetSpanTime(TimeSpan ts) { if (ts.TotalDays/360>1) { return Math.Floor(ts.TotalDays / 360) + "年前"; } else if(ts.TotalDays/30>1) { return Math.Floor(ts.TotalDays / 30) + "月前"; } else if (ts.TotalHours>24) { return Math.Floor(ts.TotalDays) + "天前"; } else if(ts.TotalHours>1) { return Math.Floor(ts.TotalHours) + "小时前"; } else if(ts.TotalMilliseconds>60) { return Math.Floor(ts.TotalMinutes) + "分钟前"; } else { return"刚刚"; } }
|
然后我们再重新声明一个viewModle类,里面的就存放消息和处理的事件
1 2 3 4 5
| public class BookCommentViewModle { public string SpanTime { get; set; } public string Msg { get; set; } }
|