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

添加评论后刷新页面评论消失问题求助(附相关代码)

问题排查与解决方案

核心问题1:评论未持久化到数据库(最可能原因)

服务层的AddComment方法大概率仅执行了_context.ChallangeComment.Add(comment),但未调用_context.SaveChanges()。

  • 逻辑分析:EF Core的DbContext会在内存中跟踪实体变化,同一个上下文内的查询能获取到未保存的实体。所以CreateComment方法中,添加评论后立刻调用GetChallangeComment(同一上下文)能查到新评论并返回显示;但刷新页面后,新请求会创建全新的DbContext,从数据库查询时这条未保存的评论不存在,因此消失。当再次添加新评论时,如果这次调用了SaveChanges(),会把之前所有未提交的内存实体一并写入数据库,所以之前的评论会跟着显示出来。
  • 修复方案:修改AddComment方法,确保添加实体后执行持久化操作:
public void AddComment(ChallangeComment comment)
{
    comment.CreateDate = DateTime.Now; // 建议补充创建时间字段赋值
    _context.ChallangeComment.Add(comment);
    _context.SaveChanges(); // 必须添加此行完成数据库写入
}

核心问题2:分页排序逻辑错误

当前GetChallangeComment方法中,排序操作OrderByDescending在Skip和Take之后,这会导致分页完成后才对数据排序,完全不符合“新评论排在最前”的预期,还可能引发数据分页混乱。

  • 修复方案:调整Linq操作顺序,必须先排序,再执行分页:
public Tuple<List<ChallangeComment>, int> GetChallangeComment(int ChallangeId, int pageId = 1)
{
    int take = 10; // 假设每页显示10条评论,可根据需求调整
    int skip = (pageId - 1) * take;
    
    var baseQuery = _context.ChallangeComment.Include(c=>c.User)
        .Where(c => !c.IsDelete && c.ChallangeID == ChallangeId);
    
    var commentList = baseQuery
        .OrderByDescending(c=>c.CreateDate) // 先按创建时间倒序
        .Skip(skip)
        .Take(take)
        .ToList();
    
    int pageCount = (int)Math.Ceiling(baseQuery.Count() / (double)take);
    
    return Tuple.Create(commentList, pageCount);
}

前端优化建议

当前页面通过load加载评论列表,若使用AJAX提交评论,CreateComment控制器应返回PartialView而非完整View,避免返回布局页冗余内容:

  1. 修改控制器CreateComment方法:
public IActionResult CreateComment(ChallangeComment comment)
{
    comment.UserID = _userService.GetUserIdByUserName(User.Identity.Name);
    comment.CreateDate = DateTime.Now;
    _challangeService.AddComment(comment);

    return PartialView("ShowComment",_challangeService.GetChallangeComment(comment.ChallangeID));
}
  1. 在提交表单中指定AJAX成功后自动更新评论列表:
<form asp-action="CreateComment" data-ajax="true" data-ajax-success="Success" data-ajax-update="#listComment">
    <textarea required class="form-control" id="comment_Comment" name="comment.Comment" rows="8"></textarea>
    <button type="submit">提交评论</button>
</form>

内容的提问来源于stack exchange,提问作者Ste Strm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 21:53:20