今天受教了,学习了收藏功能的实现,以后实现什么功能的时候,一定先把逻辑理清楚再做。
关于收藏功能的逻辑梳理,
一、前台页面
1.收藏按钮,默认显示“收藏”
<li>
<a id="mir" class="btn btn-danger" href="javascript:void(0)" style="color:#fff;">
<span id="sctxt">收藏</span><i class="iconfont icon-favorite"></i>
</a>
</li>
2.页面加载,调用pdUserCollection()方法进行判断当前信息是否已收藏,判读的依据是数据库中收藏表中是否存在该信息(也可以判断数据表中该信息的状态)
1>.如果已收藏,更新sctxt的显示文字为:取消收藏
2>.如果未收藏,更新sctxt的显示文字为:收藏
3.点击按钮,触发点击事件,调用addUserCollection()方法,后台方法进行判断数据表中是否收藏,
1>.如果已收藏,执行删除操作(或者改变信息状态)
2>.如果未收藏,执行添加操作(或者改变信息状态)
//页面加载
$(document).ready(function () {
//查询现状
pdUserCollection(infoId, userID, infoType);
//注册点击事件
$("#mir").click(function () {
if (userID != -1) {
addUserCollection(infoId, userID, infoType);
} else {
$(location).attr('href', '/webuser/login');
}
});
});
//页面加载查询是不是已经关注
function pdUserCollection(infoId, userID, infoType) {
$.ajax({
type: "post",
url: "/user/AddShouCang",
data: { "infoId": infoId, "userID": userID, "InfoType": infoType,"ActionType":"CX" },
dataType:"json",
success: function (data) {
if (data.code) {
$("#sctxt").text('取消收藏');
} else {
$("#sctxt").text('收藏');
}
}
})
}
//收藏操作 按钮被点击时执行
function addUserCollection(infoId, userID, infoType) {
$.ajax({
type: "POST",
url: "/user/AddShouCang",
data: { "infoId": infoId, "userID": userID, "InfoType": infoType, "ActionType": ""},
dataType: "json",
success: function (data) {
if (data.code) {
$("#sctxt").text('取消收藏');
} else {
$("#sctxt").text('收藏');
}
}
})
}
二、后台
后台进行逻辑判断执行相近的数据库操作
/// <summary>
/// 前端收藏处理的方法
/// 查询和插入
/// </summary>
/// <param name="InfoId">信息ID</param>
/// <param name="UserId">用户ID</param>
/// <param name="infoType">信息类型</param>
/// <param name="ActionType">操作类型:CX 代表查询 其他为插入</param>
/// <returns>True 或 False 字符串</returns>
public ActionResult AddShouCang(int InfoId, int UserId, int infoType,string ActionType="CX")
{
dynamic cc = new ExpandoObject();
string SiteId = SYSConfig.SiteId;
//查是否存在
SPX.DAL.PortalRegUserShouCang Pdal = new SPX.DAL.PortalRegUserShouCang();
List<SPX.Model.PortalRegUserShouCang> PList = Pdal.GetListArray("infoid = " + InfoId + " and userid = " + UserId + " and infoType =" + infoType);
//当查询时
if (ActionType == "CX")
{
if (PList.Count > 0)
{
cc.code = true;
cc.msg = "已关注";
return Content(DAL.JsonDAL.ObjToJsonStr(cc));
}
else
{
cc.code = false;
cc.msg = "未关注";
return Content(DAL.JsonDAL.ObjToJsonStr(cc));
}
}
//当插入时
if (PList.Count > 0)
{
Pdal.Delete(PList[0].Id);
cc.code = false;
cc.msg = "已取消";
return Content(DAL.JsonDAL.ObjToJsonStr(cc));
}
else
{
SPX.Model.PortalRegUserShouCang PM = new SPX.Model.PortalRegUserShouCang();
PM.SiteId = SiteId;
PM.addtime = DateTime.Now;
PM.InfoId = InfoId;
PM.UserId = UserId;
PM.InfoType = infoType;
Pdal.Add(PM);
cc.code = true;
cc.msg = "成功关注";
return Content(DAL.JsonDAL.ObjToJsonStr(cc));
}
}