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

SharePoint 2013可视化WebPart中Update Panel在Chrome中失效求助

我之前在做SharePoint 2013可视化WebPart的时候,也碰到过和你一模一样的情况——IE下AJAX正常跑,Chrome里UpdatePanel完全没反应,折腾了好一阵才搞定,给你整理下完整的解决流程:

问题根源

其实这是SharePoint的AJAX机制在Chrome中的兼容性问题:当UpdatePanel异步刷新后,Chrome不会自动重新绑定ASP.NET控件的回发事件,导致按钮点击、GridView行操作这类交互触发不了AJAX请求。

具体解决步骤
  • 第一步,在SharePoint的Layouts文件夹下新建一个JS文件(比如命名为FixChromeUpdatePanel.js),把下面的修复代码粘贴进去:

    // 监听UpdatePanel异步请求结束事件
    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function() {
        // 重新绑定按钮的回发事件(示例:绑定ID为btnSubmit的按钮)
        var submitBtn = document.getElementById('<%= btnSubmit.ClientID %>');
        if (submitBtn) {
            submitBtn.onclick = function() { __doPostBack('<%= btnSubmit.UniqueID %>', ''); };
        }
    
        // 重新绑定GridView行内操作按钮的回发事件
        var grid = document.getElementById('<%= GridView1.ClientID %>');
        if (grid) {
            var rows = grid.getElementsByTagName('tr');
            for (var i = 0; i < rows.length; i++) {
                var cells = rows[i].getElementsByTagName('td');
                for (var j = 0; j < cells.length; j++) {
                    var btns = cells[j].getElementsByTagName('input');
                    for (var k = 0; k < btns.length; k++) {
                        // 匹配ASP.NET生成的带$符号的按钮name属性
                        if (btns[k].type === 'button' && btns[k].name.indexOf('$') > -1) {
                            btns[k].onclick = function() { __doPostBack(this.name, ''); };
                        }
                    }
                }
            }
        }
    });
    

    这段代码的核心是利用Sys.WebForms.PageRequestManager的endRequest事件,在每次UpdatePanel刷新完成后,手动重新绑定控件的回发逻辑,确保Chrome能正确识别并触发AJAX请求。

  • 第二步,在你的可视化WebPart的.ascx文件中,找到ScriptManagerProxy控件,在它的Scripts集合里添加这个JS文件的引用:

    <asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server">
        <Scripts>
            <!-- 注意路径要对应你的JS文件实际位置,SharePoint 2013默认用15 hive -->
            <asp:ScriptReference Path="/_layouts/15/FixChromeUpdatePanel.js" />
        </Scripts>
    </asp:ScriptManagerProxy>
    

    如果你的环境用的是14 hive(部分旧部署),把路径里的15改成14即可。

额外注意事项
  • 确保所有需要AJAX交互的控件都放在UpdatePanel内部,或者通过Triggers属性关联到UpdatePanel;
  • 如果你的GridView有自定义客户端脚本(比如行高亮、自定义验证),也要把初始化逻辑放到endRequest事件里,避免刷新后脚本失效;
  • 测试前记得清空Chrome的缓存,有时候浏览器会加载旧的JS文件,导致修改不生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:31:01