0

我在我的 ASP.NET 4.0 应用程序中使用 Telerik RAD 编辑器控件,该应用程序位于任何更新面板之外。在同一页面中,我使用了几个 ModalPopUps 和更新面板来防止意外的完整回发。有几个从 Javascript 函数调用的 Pagemethods 以及几个服务器端按钮单击事件,它们也从 javascript 函数调用。在此过程中,Page 经常抛出以下突出显示的 Javascript 错误,并且在没有 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 的 3rd 方编辑器控件的 KeyDown 事件,并且我已经使用“KeyDown”事件在该编辑器控件中挂钩了 IFrame,但是一旦更新面板执行任何异步回发,它就会取消绑定,所以我已经在 J​​Query 中完成了以下代码来维护编辑器中的 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>**

重要的是我在 Body Tag 之后完成了上面的 JQuery 代码。请帮助我解决上述问题的可能解决方案,我可以停止生成此错误或无论如何绕过错误。因为它完全推迟了项目的完成。

4

1 回答 1

0

这是为了第一次从更新面板子控件事件中编写一些会话变量。为避免此解析错误,应遵循以下解决方案之一: 1. Page.Trace.IsEnabled = false; 应该在同步页面加载和异步页面加载中禁用跟踪。if(!Page.IsPostBack) { Page.Trace.IsEnabled=false; } else if (ScriptManager.GetCurrent(this.Page).IsInAsyncPostBack) { Page.Trace.IsEnabled = false; }

2. 在页面属性中添加 EnableEventValidation="false"。

3.第一次加载页面时将初始值放入会话变量中以创建cookie。

于 2013-02-08T06:58:47.950 回答