繁体   English   中英

当我使用jQuery模型加载aspx页面时,无法使用该aspx页面的服务器端方法

[英]When I load an aspx page using jQuery model, I am unable use the server side methods of that aspx page

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

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

}

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

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

谢谢

更新:这是我得到的错误

在此处输入图片说明

我查看了您的示例项目,您遇到的问题很容易解释,但是恐怕要使它正常工作并不是那么简单。

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

对话框加载后,它将其内容设置为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请求。 如果Test.aspx页面中的Button执行Ajax请求,而不是使用更新面板和脚本管理器时获得的那种Ajax请求,则上面的方法将起作用。 由于这些工具的内部工作方式,您将无法使用它们。

如果要在应用程序中使用Ajax,建议您将WCF Web服务与JQuery结合使用。 在线上有很多关于该主题的好教程。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM