如何在父视图中基于_partialA的Name值加载_partialB?附XRegExp报错
解决"Uncaught Error: can't load XRegExp twice in the same frame"问题
看起来你在点击Name按钮加载分部视图_partialB时遇到了XRegExp重复加载的报错,这个问题大概率是同一页面中多次引入了XRegExp脚本导致的——比如主页面已经加载过一次,_partialA或_partialB里又重复引用了,或者每次AJAX加载分部视图时都重新注入了这个脚本。结合你的场景,我给你几个具体的解决思路:
1. 统一脚本引用到主布局
最稳妥的方式是把XRegExp的脚本引用只放在你的主布局文件(比如_Layout.cshtml)里,确保整个页面生命周期内只加载一次。然后在_partialA和_partialB中移除所有XRegExp的脚本引用,这样不管你加载多少次分部视图,都不会触发重复加载的报错了。
2. 在分部视图中添加加载判断
如果因为业务需求必须在分部视图里引用XRegExp,可以在脚本加载前加一个判断,只有当XRegExp还未初始化时才引入:
<script> // 检查XRegExp是否已存在,不存在才加载 if (typeof XRegExp === 'undefined') { const script = document.createElement('script'); script.src = '/Scripts/xregexp.min.js'; // 替换成你的XRegExp实际路径 document.head.appendChild(script); } </script>
这种方式既保证了分部视图单独使用时的依赖完整性,又避免了重复加载的问题。
3. 优化AJAX加载分部视图的逻辑
如果你是用jQuery的load()方法加载分部视图,默认会执行返回内容里的所有脚本。可以修改加载逻辑,只提取并插入HTML内容,过滤掉重复的脚本:
// 替换你原来的点击事件逻辑 $('.name-button').click(function() { const selectedName = $(this).text(); $.get('/YourController/ABC?name=' + selectedName, function(response) { // 只提取分部视图的HTML内容(根据你的视图根元素调整选择器) const $content = $(response).find('.partial-content'); $('#partialB-container').html($content); }); });
另外看了你的Controller代码,逻辑上是没问题的——不管name参数是否为空,都会返回包含firsts和seconds的ClsA模型,确保分部视图能拿到正确的数据。重点还是解决前端脚本重复加载的问题。
内容的提问来源于stack exchange,提问作者User9895
相关产品推荐
相关产品推荐

