You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core 2.1点赞按钮AJAX实现异常问题求助

ASP.NET Core 2.1点赞按钮AJAX实现异常问题求助

我正在用ASP.NET Core 2.1开发一个折扣分类网站,想实现一个仅支持点赞(无取消点赞功能)的按钮,让访客能给喜欢的帖子点赞。后端逻辑已经写好,不存在命名空间相关问题,先给大家看控制器里的动作方法:

[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);
    }
}

下面是视图中循环渲染帖子的部分代码:

@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>

为了点击后不刷新页面,我写了AJAX脚本:

@section Script{
    <script>
        function IncreaseLike(id) {
            $.ajax({
                url: "/Home/AddLike",
                type: "POST",
                data: { id: id },
            }).done(function (result) {
                $(".like").append(result);
            }
               )
            };
        
    </script>
}

现在遇到了两个问题:

  1. 点击点赞按钮后,点赞数不是替换原来的数字,而是在旁边新增一个数字;
  2. 操作会影响页面上所有帖子的点赞数,而不是只更新我点击的那个帖子。

我知道大概是因为用了类选择器.like追加内容,但不想给每个帖子都定义唯一ID,请问该怎么修改AJAX代码,让它只更新被点击帖子的点赞数,并且是替换而非追加?

数据库逻辑是正常的,用ASP.NET标签助手(asp-action和asp-controller)能正常工作,但会刷新页面,所以还是想解决AJAX的问题。麻烦大家帮我看看代码,找出JS部分的问题。

备注:内容来源于stack exchange,提问作者Farid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 12:44:30