【问题标题】:When I load an aspx page using jQuery model, I am unable use the server side methods of that aspx page当我使用 jQuery 模型加载一个 aspx 页面时,我无法使用该 aspx 页面的服务器端方法
【发布时间】:2012-08-10 20:24:12
【问题描述】:

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

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

}

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

谁能解释一下是什么原因?

谢谢

更新:这是我遇到的错误

【问题讨论】:

  • 这绝对是可能的。发布异常详细信息,包括完整的堆栈跟踪。
  • 我创建了一个简单的项目来复制这个问题,如果你无法访问它,请告诉我我还能如何分享它会与你分享。
  • 先生。 @Oleg 这里有什么帮助吗?

标签: c# jquery asp.net modal-dialog popupwindow


【解决方案1】:

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

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

当对话框加载时,它会将其内容设置为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,我建议您将 WCF Web 服务与 JQuery 结合使用。网上有很多关于这个主题的好教程。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    相关资源
    最近更新 更多