我查看了您的示例项目,您遇到的问题很容易解释,但恐怕它不会那么简单。
首先,我将解释导致异常的原因。
当对话框加载时,它将其内容设置为页面生成的任何输出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。