我想在用ASP编写的项目中实现“喜欢”按钮(只喜欢,不讨厌)。NET Core 2.1版本。这是一个折扣分类网站,希望访问者能够喜欢他们想要的帖子。由于我对命名空间没有任何问题,我将只从后端在控制器中提供action方法,如下所示:
[HttpPost]
public async Task<IActionResult> AddLike(int Id)
{
AdminPostModel postModel = new AdminPostModel();
postModel.Post = await _offerDbContext.Posts.SingleOrDefaultAsync(x => x.Id == Id);
var UserIP = _accessor.HttpContext?.Connection?.RemoteIpAddress?.ToString();
var Myagent = Request.Headers["User-Agent"].ToString().Substring(0, 40);
string MyVisit = UserIP + " " + Myagent;
postModel.Visitinfos = await _offerDbContext.Visitinfos.ToListAsync();
Visitinfo visitinfo = new Visitinfo();
visitinfo.PostNumber = Id;
visitinfo.Deviceinfo = MyVisit;
if(postModel.Visitinfos.Any(x => x.PostNumber == visitinfo.PostNumber && x.Deviceinfo == visitinfo.Deviceinfo))
{
ViewBag.Message = "Eyni elanı bir dÉfÉdÉn çox bÉyÉnÉ bilmÉzsiniz";
return Json(postModel.Post.LikeCount);
}
else
{
_offerDbContext.Visitinfos.Add(visitinfo);
postModel.Post.LikeCount++;
await _offerDbContext.SaveChangesAsync();
return Json(postModel.Post.LikeCount);
}
}
请不要将自己与用户IP或用户代理详细信息混淆,这与我的问题无关。我返回了JSON,其中包含了点赞数(LikeCount)的结果,这是Post模型的属性,并在此操作中通过视图模型访问了它。
以下是cshtml视图的部分帖子:
@foreach (Post item in Model)
{
<div class="postcontent">
<div class="row">
<div class="col-lg-12 col-md-12">
<div class="uppart">
<h6>@item.Title</h6>
</div>
<div class="imgframe">
@if (item.URL != null)
{
<a href="@item.URL" target="_blank"> <img class="postimg" src="~/images/@item.Image"></a>
}
else
{
<a asp-action="Detailed" asp-controller="Detailed" asp-route-id="@item.Id" target="_blank"><img class="postimg" src="~/images/@item.Image"></a>
}
</div>
<div class="posttext">
<p>
@item.Description
</p>
<p class="formore">
<a href="@item.URL" target="_blank">ÆTRAFLI</a>
</p>
</div>
<div class="dates">
<p class="postdate">Tarix: @item.CreatedDate.ToString("dd/MM/yyyy")</p>
@if (item.ExpirationDate.ToString("dd/MM/yyyy") == "01.01.2021" || item.ExpirationDate.ToString("dd/MM/yyyy") == "01/01/2019")
{
<p class="expdate">Bitme tarix: NamÉlum</p>
}
else
{
<p class="expdate">Bitme tarix: @item.ExpirationDate.ToString("dd/MM/yyyy") </p>
}
**<button onclick="IncreaseLike(@item.Id)">Like</button>
<p class="like"></p>**
</div>
</div>
</div>
如您所见,在按钮标签中,我为Post Id调用了IncreaseLike()函数,该函数在Javascript部分中使用,如下所示:
@section Script{
<script>
function IncreaseLike(id) {
$.ajax({
url: "/Home/AddLike",
type: "POST",
data: { id: id },
}).done(function (result) {
$(".like").append(result);
}
)
};
</script>
}
使用AJAX的目的是在点击“点赞”按钮后中断页面加载。但在运行应用程序时,点击“点赞”按钮后,它会在前一个1旁边添加新的1,而不是更新其位置上的数字。它将其应用于页面的所有帖子,而不仅仅是特定的点击帖子。也许是因为我把它附加到一个类(.like)中,但我不想为页面中的每个帖子定义不同的Id,我该如何实现ajax,使它只附加到所选的帖子,并且只通过增加like数字一次,而不是在数字旁边放置new?数据库没有问题,因为它不使用ajax,也不使用asp操作和asp控制器标签助手,但这会使页面在每次点击时加载。请仔细阅读我的代码,并协助查找可能来自JS部分(AJAX)的问题。