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

jQuery调用Generic Handler更新评论踩数时批量赋值错误问题求助

问题分析与解决方案

先拆解你遇到的三个核心问题:

  1. Generic Handler 返回重复拼接值(比如01010101010)
  2. 前端会更新所有lblDesLike标签
  3. 无法定位到点击对应的单个评论标签

1. 修复Generic Handler的逻辑问题

你现在的Handler代码是遍历所有评论的踩数并输出,导致所有CommentDesLike的值被拼接在一起返回,这就是出现01010101010的原因。正确逻辑应该是根据传入的CommentID筛选对应记录,返回单个值。

修改后的Handler代码:

int commentId = Convert.ToInt32(context.Request.QueryString["CommentiD"]);
NewsCommentLikesEntity obj = new NewsCommentLikesEntity();
// 优先用根据CommentID查询单条记录的方法(如果实体类有实现)
var targetComment = obj.SelectByCommentId(commentId);
if (targetComment != null)
{
    context.Response.Write(targetComment.CommentDesLike.ToString());
}

// 如果没有单条查询方法,用原SelectAll筛选也可以:
// var Ilist = obj.SelectAll();
// var targetRow = Ilist.FirstOrDefault(row => row.CommentId == commentId);
// if(targetRow != null)
// {
//     context.Response.Write(targetRow.CommentDesLike.ToString());
// }

另外,你当前用POST请求却把参数放在QueryString里,虽然能运行,但更规范的做法是改用GET请求,或者将参数放在请求体中。


2. 修复前端的标签定位问题

你现在的成功回调用$('.A2,#lblDesLike').text(commentLikesTotal),会选中页面所有带.A2类的标签和ID为lblDesLike的元素,导致所有评论踩数被统一更新。正确做法是找到当前点击按钮下对应的lblDesLike。

同时,你的事件绑定逻辑有冗余,且不要给多个lblDesLike设置相同的ClientIDMode="Static"——这会导致页面出现重复ID元素,违反HTML规范,也是无法定位单个标签的原因之一。

修改后的jQuery代码:

// 用事件委托绑定,确保动态生成的评论按钮也能触发事件
$(document).on('click', '.A1', function (e) {
    e.preventDefault(); // 阻止LinkButton默认的表单提交行为
    var $currentBtn = $(this); // 保存当前点击的按钮对象
    var commentId = $currentBtn.data("id");

    // 如果需要从外部获取commentId,按需调整逻辑,通常data-id已经足够
    if (!commentId) {
        // commentId = Comment;
    }

    $.ajax({
        type: "GET",
        url: '../Searis/Test.ashx',
        data: { CommentiD: commentId }, // 用data参数传参,比拼接URL更安全
        dataType: "text", // Handler返回的是纯数字,用text解析更合适
        success: function (response) {
            // 定位到当前按钮下的.A2标签(即对应评论的踩数标签)
            $currentBtn.find('.A2').text(response);
        },
        error: function() {
            // 可选:添加错误提示
            // alert('获取踩数失败,请稍后再试');
        }
    });
});

为什么改dataType为text?

你的Handler返回的是纯数字(比如0或1),并非标准JSON格式,用dataType: "json"会导致解析失败,回调可能无法正常执行。如果要返回JSON,Handler需改成:

context.Response.Write("{\"total\":" + targetRow.CommentDesLike + "}");

前端则用jsonData.total获取值。


3. 额外注意事项

  • 确保NewsCommentLikesEntity的查询方法能正确根据CommentID返回对应数据,避免查询逻辑错误。
  • 移除lblDesLike的ClientIDMode="Static",让ASP.NET自动生成唯一ID,或完全依赖类选择器.A2定位元素,避免重复ID问题。

内容的提问来源于stack exchange,提问作者AbdulRahman Almutairi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:59:38