我在加载到Shadowbox弹出窗口的页面的代码隐藏中调用它:
ScriptManager.RegisterStartupScript(this, this.GetType(),
"CloseScript", "parent.closeServiceOption();", true);
我知道正在调用Javascript函数,因为弹出了Alert()框,我可以逐步浏览IE Developer Toolbar中的代码。
function closeServiceOption() {
Shadowbox.close();
alert("updating");
__doPostBack('<% =upGrid.ClientID %>', '');
return true;
upGrid是父页面上的asp:UpdatePanel:
<asp:UpdatePanel ID="upGrid" runat="server" UpdateMode="Conditional"
EnableViewState="true">
这个技巧适用于其他几个页面,但不是我刚写的那个,我无法弄清楚原因。
这是IE给我看的错误:
Object doesn't support this property or method ScriptResource.axd?
d=mnUf4WG8LrLFogIwzhvkGVdo-KPzLIFFBfGx6AcICRfPeY_Du0eoxLRaVGrqyoAqxR8l67
1VS6MZAdxdawuxsyoM3wpGxwL83KwO7UehZus1&t=ffffffffec2d9970,
line 4723 character 21
第4723行是Sys $ Net $ XMLHttpExecutor函数中的finally()子句:
finally {
if (_this._xmlHttpRequest != null) {
_this._xmlHttpRequest.onreadystatechange = Function.emptyMethod;
_this._xmlHttpRequest = null;
}
}
2行后,当我在调试器中检查它时,我得到“权限被拒绝”,并且xmlHttpRequest的所有其他属性都被“拒绝访问”。 再次,我在其工作的几个其他页面上使用此技巧(在客户端上调用__doPostBack)。 UpdatePanel具有相同的属性(具体来说,ViewState已启用,并且禁用它不能解决问题),并且我在此页面上看不到任何其他不同的内容,但必须存在我遗漏的内容。有什么想法吗?
Firefox / Firebug,顺便说一句,根本没有显示任何错误,但UpdatePanel也没有回发。
答案 0 :(得分:0)
我不会手动触发__doPostBack
,而是在您的UpdatePanel上调用Update方法。
function closeServiceOption() {
Shadowbox.close();
alert("updating");
var upGrid = document.getElementById("upGrid");
upGrid.update();
return true;
}
答案 1 :(得分:0)
Microsoft应该考虑并解决这些问题。
UpdatePanel
使用部分渲染。试试UpdateMode="Conditional" ChildrenAsTriggers="true">
Control并不保持RegisterClient Side所需的状态。
第二
Dim cs As ClientScriptManager = Page.ClientScript
cs.RegisterClientScriptBlock(Me.GetType(), ControlNAme.ClientID, "<script>" & vbCr & vbLf & "window.ControlNAme='" + ControlNAme.ClientID + "';" & vbCr & vbLf & "</" + "script>")
第三。尝试使用ICallbackEventHandler
接口来避免回发导致松开控件状态并且Javascript开始烦扰你。