0

当我使用下面的代码使用 jQuery 模型将 aspx 页面加载到弹出窗口时。

function OpenExceptions() {
$('#Equipmentdialog').load('Popups/Test1.aspx', function () {
   $(this).dialog({
        modal: true,
        width: 900,
        height: 400
    });
});

}

我无法在 Test1.Aspx 方法中调用任何服务器端方法(C# 按钮单击),当我调用服务器端事件时,我得到资源未找到异常?

有人可以解释一下是什么原因吗?

谢谢

更新:这是我得到的错误

在此处输入图像描述

4

1 回答 1

0

我查看了您的示例项目,您遇到的问题很容易解释,但恐怕它不会那么简单。

首先,我将解释导致异常的原因。

当对话框加载时,它将其内容设置为页面生成的任何输出Test.aspx。由于页面在您导航到它时会生成此 HTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>

</title></head>
<body>
    <form name="form1" method="post" action="Test.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTI2NTY4ODI3MWRkmRTYlsUe3rVbAI2jDoNeA5EPuo8=" />
</div>

<div>

    <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAgKd2MeEBAKM54rGBl+Fr2fdw6uP6072WYTIw/gz9N5E" />
</div>
    <div>
        <span id="Label1">Label</span>
        <br />
        <br />
        <input type="submit" name="Button1" value="Button" id="Button1" />

    </div>
    </form>
</body>
</html>

对话框最终显示一个表单,其操作设置为Test.aspx; 因此,当您单击Button对话框上的 时,它会尝试将表单回发到Test.aspx但它没有找到它,因为此页面在里面Popups/Test.aspx。现在,为了“修复它”(我在引号中这么说是因为它不会真正修复任何东西),您可以通过蛮力更改对话框的 HTML;做这样的事情:

function OpenExceptions() {
            $('#Equipmentdialog').load('Popups/Test.aspx #form1', function (response, status, xhr) {
                response = response.replace('action="Test.aspx"', 'action="Popups/Test.aspx"'); //Make sure the form's action is accurate
                $(this).html(response);
                $(this).dialog({
                    modal: true,
                    width: 900,
                    height: 400
                });
            });
        }

现在,当您单击 时,Button您将不再收到Resource Not Found Exception; 但是,由于这会导致正常回发,对话框将消失,按钮将回发页面,页面上的标签将显示当前日期和时间。

同样,这一切都发生了,因为您正在执行正常的回发而不是 Ajax 请求。Button如果页面中的Test.aspx执行 Ajax 请求但不是您使用更新面板和脚本管理器时获得的那种请求,我的上述方法将起作用。由于它们在内部工作的方式,您将无法使用这些工具......

如果您希望在您的应用程序中使用 Ajax,我建议您将 WCF Web 服务与 JQuery 结合使用。网上有很多关于这个主题的好教程。

我希望我的回答至少可以帮助您理解为什么这对您不起作用,以及如果您继续使用这种方法,为什么它不会起作用。您可以应用许多技巧来使其正常工作,但我想不出一个可以易于维护和扩展的单一方法。最好的方法是使用 WCF Web 服务(或页面方法)和 JQuery 正确地执行 Ajax。

于 2012-08-13T02:48:36.877 回答