能否在Ajax helper的UpdateTargetId中使用jQuery通配符选择器?
关于ASP.NET Ajax中UpdateTargetId使用jQuery通配符的问题
好问题!直接给结论:你不能直接在UpdateTargetId参数里使用jQuery通配符选择器,原因和可行的替代方案如下:
为什么直接用不行?
UpdateTargetId的设计初衷是接收纯HTML元素ID字符串,ASP.NET的Ajax辅助方法(比如Ajax.ActionLink、Ajax.BeginForm)内部会通过这个ID直接调用原生DOM方法查找元素(类似document.getElementById()),完全不会解析jQuery的选择器语法。
如果你写成UpdateTargetId ="$('[id$=divAllStudent]')",这个字符串会被当成一个字面量ID去查找,显然页面上不存在ID为$('[id$=divAllStudent]')的元素,所以AJAX返回的内容根本无法正确插入。
替代方案:用OnSuccess回调手动处理
既然原生的UpdateTargetId不支持,我们可以利用AjaxOptions里的OnSuccess回调函数,自己用jQuery选择器完成内容插入。具体步骤如下:
1. 修改Ajax.ActionLink配置
去掉UpdateTargetId参数,保留其他配置:
@Ajax.ActionLink("View All Student Info", "AllStudent", "Home", new AjaxOptions { OnBegin = "fnOnBegin", InsertionMode = InsertionMode.Replace, HttpMethod = "GET", LoadingElementId = "imgloader", OnSuccess= "fnSuccess", Confirm="Do you want to get all student info ?????" }, new { @class = "btn btn-default" })
2. 编写OnSuccess回调函数
在页面的JavaScript中定义fnSuccess函数,用jQuery通配符选择器找到目标元素,再根据你需要的插入模式处理内容:
function fnSuccess(result) { // 用jQuery属性结尾选择器找到目标元素 const targetElements = $('[id$=divAllStudent]'); // 根据原来的InsertionMode处理内容 switch ('Replace') { case 'Replace': targetElements.html(result); break; case 'Append': targetElements.append(result); break; case 'InsertBefore': targetElements.before(result); break; case 'InsertAfter': targetElements.after(result); break; } }
如果只需要替换内容,也可以用简化版:
function fnSuccess(result) { $('[id$=divAllStudent]').html(result); }
这样就能实现你想要的“用jQuery通配符选择器指定更新目标”的需求了。
内容的提问来源于stack exchange,提问作者Monojit Sarkar
相关产品推荐
相关产品推荐

