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

ASPX WebForm中jQuery $().load()加载页面后回发功能失效问题求助

ASPX WebForm模态框加载页面后回发失效问题

问题现象

  • 使用jQuery $().load()将ASPX页面加载到模态框后,清空模态框,原页面所有回发按钮及__postback命令完全失效
  • 模态框内加载的页面提交按钮可正常工作,但移除模态框后,所有提交命令仍指向加载页的地址
  • 报错信息:

Uncaught TypeError: Cannot set properties of undefined (setting 'value')
at __doPostBack (eval at (jquery-1.10.2.js:612:22), :9:37)

核心原因

加载的ASPX页面会自动生成WebForm标准的__doPostBack函数及表单元素,覆盖了原页面的同名函数。新生成的函数中,theForm变量指向的是加载页的form1:

//<![CDATA[
var theForm = document.forms['form1'];
if (!theForm) {
    theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
//]]>

当模态框被清空,加载页的form1节点被移除,触发回发时,新的__doPostBack找不到theForm下的__EVENTTARGET等元素,导致报错。

解决方案

1. 加载时仅提取目标内容(推荐)

使用jQuery load()方法的选择器参数,只加载目标页面中需要的内容区块,避免引入完整的表单和__doPostBack脚本:

// 只加载目标页面中id为target-content的容器内容
$('#div_modal1').load('cpal?item_id=<%=Request.QueryString("iri")%>&type_id=<%=is1.SelectedValue.ToString%> #target-content', function () { })

注:需要在被加载的ASPX页面中,把需要展示的内容放在一个独立的容器(如<div id="target-content">)中

2. 备份并恢复原页面的__doPostBack

在加载新页面之前,先备份原页面的__doPostBack函数,清空模态框后恢复:

// 备份原函数
var originalDoPostBack = window.__doPostBack;

// 加载页面
$('#div_modal1').load('cpal?item_id=<%=Request.QueryString("iri")%>&type_id=<%=is1.SelectedValue.ToString%>', function () { })

// 清空模态框时恢复原函数
function clearModal() {
    $('#div_modal1').empty();
    window.__doPostBack = originalDoPostBack;
}

3. 重新定义正确的__doPostBack

如果备份恢复不方便,可以直接重新定义__doPostBack,确保它指向原页面的form1:

function resetDoPostBack() {
    var theForm = document.forms['form1'] || document.form1;
    window.__doPostBack = function(eventTarget, eventArgument) {
        if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
            theForm.__EVENTTARGET.value = eventTarget;
            theForm.__EVENTARGUMENT.value = eventArgument;
            theForm.submit();
        }
    }
}

// 清空模态框后调用
clearModal();
resetDoPostBack();

4. 过滤加载内容中的脚本

通过AJAX手动获取HTML,过滤掉所有<script>标签后再插入模态框,避免加载页的脚本覆盖原页面内容:

$.get('cpal?item_id=<%=Request.QueryString("iri")%>&type_id=<%=is1.SelectedValue.ToString%>', function(html) {
    // 过滤脚本标签,提取目标内容
    var filteredHtml = $(html).find('#target-content').html();
    $('#div_modal1').html(filteredHtml);
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 23:30:17