jQuery调用Generic Handler更新评论踩数时批量赋值错误问题求助
问题分析与解决方案
先拆解你遇到的三个核心问题:
- Generic Handler 返回重复拼接值(比如
01010101010) - 前端会更新所有
lblDesLike标签 - 无法定位到点击对应的单个评论标签
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
相关产品推荐
相关产品推荐

