在回发页面时避免Javascript错误
我在ASP.NET 4.0应用程序中使用Telerik RAD编辑器控件,它位于任何更新窗格之外。在同一个页面中,我使用了几个modalpopup和update窗格来防止意外的完全回发。 有两个Pagemethods是从Javascript函数调用的&还有两个服务器端按钮单击事件也是从Javascript函数调用的。 在这个过程中,Page经常抛出下面突出显示的Javascript错误&在没有Javascript函数继续或调用任何服务器端方法或事件之后&程序被挂起。一旦它托管在本地服务器上,并且出现下面定义的错误,应用程序将通过进一步的javascript调用继续运行 错误消息来自:在回发页面时避免Javascript错误,javascript,jquery,asp.net,ajax,radeditor,Javascript,Jquery,Asp.net,Ajax,Radeditor,我在ASP.NET 4.0应用程序中使用Telerik RAD编辑器控件,它位于任何更新窗格之外。在同一个页面中,我使用了几个modalpopup和update窗格来防止意外的完全回发。 有两个Pagemethods是从Javascript函数调用的&还有两个服务器端按钮单击事件也是从Javascript函数调用的。 在这个过程中,Page经常抛出下面突出显示的Javascript错误&在没有Javascript函数继续或调用任何服务器端方法或事件之后&程序被挂起。一旦它托管在本地服务器上,并且
function Sys$WebForms$PageRequestManager$_endPostBack(error, executor, data) {
if (this._request === executor.get_webRequest()) {
this._processingRequest = false;
this._additionalInput = null;
this._request = null;
}
var handler = this._get_eventHandlerList().getHandler("endRequest");
var errorHandled = false;
if (handler) {
var eventArgs = new Sys.WebForms.EndRequestEventArgs(error, data ? data.dataItems : {}, executor);
handler(this, eventArgs);
errorHandled = eventArgs.get_errorHandled();
}
if (error && !errorHandled) {
**throw error;**
}
}
上面标记的区域抛出错误。
我尝试过以下定义的方法,但还不能最终确定相同的方法,即停止反映此错误或跳过此错误,以便不会产生任何影响,从而影响应用程序的正常流程周期
尝试解决方案1。
首先,我尝试注册位于更新面板下的控件&在页面加载中执行任何服务器端事件
ScriptManager ScrMgr=new ScriptManager();
ScrMgr.RegisterAsyncPostBackControl(this.LstBoxXSD)强>
尝试解决方案2。
其次,我尝试在更新面板中使用非同步触发器绑定控件
**<asp:AsyncPostBackTrigger ControlID="LstBoxXSD" EventName="SelectedIndexChanged"/>**
****
尝试解决方案3。
接下来,需要使用jquery中的第三方编辑器控件的KeyDown事件,我已经用“KeyDown”事件钩住了该编辑器控件中的IFrame,但一旦update pannel执行任何异步回发,它就会解除绑定,因此,我在JQuery中编写了以下代码,以在编辑器中维护Iframe和它的KeyDown事件之间的挂钩绑定
**<script language="javascript" type="text/javascript">
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
function EndRequestHandler(sender, args) {
$(document).ready(function () {
$(function () {
$('#3rdPartyControl_contentIframe').contents().find("body").bind("keydown", function (e) {
e = e || window.event; // because of Internet Explorer quirks...
var code = e.which || e.charCode || e.keyCode; ;
if (code == 49 && !e.altKey && !e.ctrlKey && !e.shiftKey) {
// alert(code);
} else if (code == 65 && e.altKey) {
// alert(code);
}
else if (code == 83 && e.altKey) {
SelectElement();
}
else if (code == 80 && e.altKey) {
if (String($find("3rdPartyControl").getSelectionHtml().trim()).length > 0) {
RemoveParentElem();
}
}
else if (code == 82 && e.altKey) {
if (String($find("3rdPartyControl").getSelectionHtml().trim()).length > 0) {
RemoveElem();
}
}
else {
}
});
});
});
}
</script>**
**
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
函数EndRequestHandler(发送方,参数){
$(文档).ready(函数(){
$(函数(){
$('#3rdPartyControl_contentIframe').contents().find(“body”).bind(“keydown”,函数(e){
e=e | | window.event;//由于Internet Explorer的怪癖。。。
var code=e.which | e.charCode | e.keyCode;
如果(代码==49&&!e.altKey&&!e.ctrlKey&&!e.shiftKey){
//警报(代码);
}else if(代码==65&&e.altKey){
//警报(代码);
}
如果(代码==83&&e.altKey){
SelectElement();
}
else if(代码==80&&e.altKey){
if(字符串($find(“3rdPartyControl”).getSelectionHtml().trim()).length>0){
RemoveParentElem();
}
}
else if(代码==82&&e.altKey){
if(字符串($find(“3rdPartyControl”).getSelectionHtml().trim()).length>0){
removelem();
}
}
否则{
}
});
});
});
}
**
重要的是,我在Body标记之后完成了上面的JQuery代码。
请帮助我从上述问题中找到一个可能的解决方案,我可以停止生成此错误,也可以绕过此错误。因为它完全推迟了项目的完成。这是为了第一次从update pannel子控件事件中写入一些会话变量。要避免此解析错误,应遵循以下解决方案之一: 1.Page.Trace.IsEnabled=false; 应该在同步页面加载和异步页面加载中禁用跟踪。 如果(!Page.IsPostBack) { Page.Trace.IsEnabled=false; } else if(ScriptManager.GetCurrent(this.Page).IsInAsyncPostBack) { Page.Trace.IsEnabled=false; } 二,。 在页面属性中添加EnableEventValidation=“false” 3.首次加载页面时,将初始值放入会话变量中以创建cookie