图书商城项目-四-1

知识点:生成静态页面。添加评论

图书商城项目-四-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; }
}

图书商城项目-四-1
http://www.kju147.com/2018/02/28/图书商城项目-四-1/
作者
个人学习
发布于
2018年2月28日
许可协议