[英]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.