我有这个发送过滤字段的ajax表单:
@using (Ajax.BeginForm(Model.Action, Model.Controller, new AjaxOptions() { HttpMethod = "POST", InsertionMode = InsertionMode.Replace, OnBegin = "onBegin", OnSuccess = "onSuccess", OnComplete = "onComplete" }, new { id = "formTemplate" }))
当我们提交此表单时,它会返回部分视图:
//返回部分视图
@model PDFModel
<iframe id="rptIframe" frameborder="0" src="@Url.Action(Model.Action, Model.Controller, new { someItemID= Model.SomeItemID, someItemID2= Model.SomeItemID2 })#zoom=70"></iframe>
//
这是我的onSucess活动:
function onSuccess(result)
{
$("#rptContainer").html(result);
}
当我将其插入html页面时,它会从iframe的src中触发Url.Action ... 此操作会返回以PDF格式呈现在表单下方的水晶报表,这在Chrome中完美运行。
我的问题是我在请求工作时运行了加载gif,我使用iframe中的onload事件隐藏它,但是在IE中没有触发onload事件,我该如何解决这个问题?。
我已经尝试过这样的事情:
document.getElementById('frameRelatorio').setAttribute('onload', 'iframeLoad();');
和
var iframe = document.getElementById('frameRelatorio');
if (iframe.attachEvent) {
iframe.attachEvent('onload', iframeLoad);
}
else {
iframe.onload = iframeLoad;
}
和
onload="return someFunction();" //at the iframe
以及许多其他解决方案。
答案 0 :(得分:0)
我停下来搜索如何在IE中进行onload工作,并开始搜索如何检测iframe是否已完全加载,然后找到此页面:
http://community.sitepoint.com/t/determining-when-an-iframe-is-fully-loaded/4724/18
所以我适应了我的问题,它按预期工作
function onSuccess(result)
{
$("#rptContainer").html(result);
if ($.browser.msie) {
var myiframe = document.getElementById('frameRelatorio');
myiframe.onreadystatechange = function () {
if (myiframe.readyState == 'complete') {
iframeLoad();
}
}
}
}
我在iframe的定义中保留了onload属性,因此它可以在Chrome中运行,然后在onSuccess事件中使用onreadystatechange事件,因此IE可以检测并按我的意愿工作。