【问题标题】:Sys.WebForms.PageRequestManagerServerErrorException: An unknown error occurred while processing the request on the server."Sys.WebForms.PageRequestManagerServerErrorException:处理服务器上的请求时发生未知错误。”
【发布时间】:2011-12-14 10:51:45
【问题描述】:

我在页面上有几个更新面板和 jquery 选项卡。而且我还在更新面板上加载了几个用户控件。用户等待几分钟后(未检查时间约 40 分钟)。当用户从提交按钮发送请求时,它给出以下错误?

'Sys.WebForms.PageRequestManagerServerErrorException:
Sys.WebForms.PageRequestManagerServerErrorException: An unknown 
error occurred while processing the request on the server. The status 
code returned from the server was: 0' when calling method: 
[nsIDOMEventListener::handleEvent]

我无法追踪这个问题来解决。但我确信。这是由 Ajax 引起的。大师,如果您知道解决方案。请告诉我。

【问题讨论】:

  • 对于新查看此内容的人 - A) 检查所有答案。有些东西可能会奏效。 B) 检查服务器日志 (IIS) 中的错误可能被抑制
  • 从部署应用程序的服务器事件查看器检查此错误的根本原因。控制面板 -> 管理工具 -> Windows 日志 -> 应用程序
  • 当我在选择另一个下拉列表时填充下拉列表时,我也遇到了这个错误。对我来说,这是因为大量数据(大约 45000 行)在页面加载时加载到网格中。我刚刚删除了该代码,它运行良好。

标签: c# javascript jquery asp.net ajax


【解决方案1】:

当您在多个更新面板中将控件注册为 AsyncPostbackTrigger 时,有时会出现此问题。

如果这不是问题,请尝试在脚本管理器声明之后添加以下内容,这是我在 manowar83this post 中找到的,它复制并稍微修改了 this post by larryw

<script type="text/javascript" language="javascript">
    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
    function EndRequestHandler(sender, args){
        if (args.get_error() != undefined){
            args.set_errorHandled(true);
        }
    }
</script>

这里讨论了更多的解决方案:http://forums.asp.net/t/1066976.aspx/9/10

【讨论】:

  • 我添加了这段代码。现在没有错误显示。但即使是提交按钮的回发也不会发生。
  • 这将忽略 所有 错误,而不仅仅是这个特定错误。您可能仍想向用户报告其他错误(“真正的”错误)。最好检查这是否是您要忽略的错误,例如 if (error.message.match(/Sys\.WebForms\.PageRequestManagerServerErrorException\.*Sys\.WebForms\.PageRequestManagerServerErrorException\.*unknown error. *从服务器返回的状态码是:0/) != -1) { args.set_errorHandled(true); }
  • 这不起作用,它只是在当前错误之前发生了新错误。
【解决方案2】:

兄弟这段代码不是解决办法就改成

<script type="text/javascript" language="javascript">
    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
    function EndRequestHandler(sender, args){
        if (args.get_error() != undefined){
            **alert(args.get_error().message.substr(args.get_error().name.length + 2));**
            args.set_errorHandled(true);
        }
    }
</script>

你会看到错误在那里,但你只是没有把它扔到 UI 上。

【讨论】:

    【解决方案3】:

    当我在 UpdatePanel 中的 GridView 中设置按钮时出现此错误...调试我的代码我发现上述错误是由于另一个内部错误“从客户端检测到潜在危险的 Request.Form 值引起的"

    最后我发现页面上的一个文本框包含 XML/HTML 内容,这反过来又导致了上述错误 当我删除 xml/HTML 并测试按钮单击时...它按预期工作。

    【讨论】:

    • 有一个XML/HTML什么的?
    • @ShaneCourtrille :默认情况下,如果您尝试使用表单将 HTML 提交到服务器,ASP.NET 将显示错误消息。例如,如果您被要求输入您的用户名,而您输入&lt;b&gt;Chris&lt;/b&gt;,那么页面将拒绝输入。这是为了防止被称为XSS 的东西。 XML/HTML 可能是有效的标记 (&lt;b&gt;) 或者只是看起来像 HTML (I like a&lt;b) 的字符串。
    • @Chris -- 我有类似的问题,但是当用户可以在 textarea 字段中输入内容时,如何防止此错误?提交表单之前是否需要在客户端剥离标签?
    • @Chris 或者是通过 ValidateRequest=false 并使用 Server.HtmlEncode/Decode 来处理这个问题的唯一方法?
    • @LoJo 这个答案解释了如何允许这样做:stackoverflow.com/a/4146470/1451957 如果您正在构建一个应该具有 HTML 的 CMS,那么您可能应该设置ValidateRequest="false"。如果您需要更高的安全性(例如,如果这是博客上的评论),那么您可能希望保留过滤器,或在评论显示的任何位置添加 Server.HtmlEncode
    【解决方案4】:

    这个解决方案也很有帮助:

    &lt;%@ Page 指令中添加validateRequest="false"

    这是因为 ASP.net 会检查来自浏览器的输入是否存在危险值。更多信息在link

    【讨论】:

      【解决方案5】:

      在更新面板中使用下面的代码。

      <script type="text/javascript" language="javascript">
          Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
          function EndRequestHandler(sender, args){
              if (args.get_error() != undefined){
                  args.set_errorHandled(true);
              }
          }
      </script>
      

      【讨论】:

        【解决方案6】:

        对我来说,问题在于我使用的是 &lt;button&gt; 而不是 &lt;asp:LinkButton&gt;

        【讨论】:

          【解决方案7】:

          有时由于某些代码,您会在文本字段中获得 HTML 标记,例如我用 HTML 的新行 BR 标记替换了一些字符,并且错误地我也将其替换为应该在多行中显示的文本文本框,因此我的多行文本框由于我的字符串替换功能而动态出现了一个新行 HTML 标记 BR,我开始收到此 JavaScript 错误,并且由于此 HTML 代码显示在更新面板中的文本框中,我开始收到此错误,因此我进行了更正,一切都很好。因此,在复制粘贴任何内容之前,请查看您的代码并查看所有标签是否已正确关闭,并且文本框或下拉列表中没有不相关的代码数据。这个错误总是由格式错误的标签和不相关的数据引起的。

          【讨论】:

            【解决方案8】:

            我对此的解决方法是在更新面板中删除我的 asp.net 代码中 TextBox 的 Text="" 属性中的任何 HTML 标记。如果您在一个页面上有多个更新面板,它将影响所有更新面板,这使得确定哪个面板存在问题变得更加困难。克里斯上面的答案让我找到了这个,但他的答案非常隐蔽,但我认为一个非常相关的答案,所以这里解释了一个答案。

            <asp:TextBox ID="bookingTBox" runat="server" ToolTip="" Width="150px" Text="<Auto Assigned>" CssClass="textboxItalicFormat"></asp:TextBox>
            

            上面的代码会报这个错误。

            下面不会。

            <asp:TextBox ID="bookingTBox" runat="server" ToolTip="" Width="150px" Text="Auto Assigned" CssClass="textboxItalicFormat"></asp:TextBox>
            

            在第二个文本框代码中,我从 Text="" 属性中删除了 。请在花时间添加脚本代码行等之前尝试一下。

            【讨论】:

              【解决方案9】:

              在 iFrame 中使用 AsyncFileUploader 时遇到此问题。使用 Firefox 时出现错误。在铬中工作得很好。似乎父页面或 iframe 页面加载不同步,并且父页面在 iframe 页面上找不到控件。添加了一个简单的 javascript 警报,说明文件已上传。这给了控件足够的时间来加载,并且由于控件可用,因此所有内容都可以正常加载。

              【讨论】:

                【解决方案10】:

                我遇到了这个问题,我花了几个小时试图解决它。

                勾选为已回答的解决方案不会修复错误,只能处理它。

                最好的方法是检查 IIS 日志文件,错误应该在那里。更新面板似乎封装了真正的错误并将其输出为“javascript错误”。

                例如我的错误是我忘记创建一个类 [Serializable]。虽然这在本地运行良好,但在服务器上部署时却无法运行。

                【讨论】:

                • 这里同上。查看了我的 IIS 服务器的事件查看器中的应用程序日志,发现我调用的 ADLookup 服务失败了。因为这是包含在 Ajax 调用中的,所以 Web 前端给出了与原始帖子一样的杂项错误。
                • 同意。接受的解决方案只是忽略错误。我还在事件查看器的应用程序日志中发现了我的具体问题。
                • 这里相同--ASP 记录了一个警告事件,其中包含引用我的代码而不是 AJAX 代码的堆栈跟踪。
                【解决方案11】:

                我有同样的问题,当我尝试解决它的方法时,我发现更新面板导致了这个问题。根据我的要求,我可以删除更新面板并摆脱问题。 所以这是一个可能的解决方案。

                【讨论】:

                  【解决方案12】:

                  当我将项目升级到 4.5 框架并且 GridView 有空数据模板时,我遇到了这个问题。发生了一些变化,之前返回空数据模板的以下语句现在返回了标题行。

                  GridViewRow dr = (GridViewRow)this.grdViewRoleMembership.Controls[0].Controls[0];
                  

                  我将其更改为下面,错误消失了,GridView 开始按预期工作。

                  GridViewRow dr = (GridViewRow)this.grdViewRoleMembership.Controls[0].Controls[1];
                  

                  我希望这对某人有所帮助。

                  【讨论】:

                    【解决方案13】:

                    对我来说这个问题是由数据库映射错误引起的。

                    我尝试在数据源上使用 select() 调用,但后面的代码中有错误。我的控件位于更新面板中,并且隐藏了实际原因。

                    通常,如果您可以暂时移除更新面板,asp.net 会返回更有用的错误消息。

                    【讨论】:

                      【解决方案14】:

                      " 1- 转到您的应用程序的 web.config"

                      " 2- 在 下添加一个新条目"

                      3- 同时找到 pages 标签并设置 validateRequest=False

                      只有这对我有用。 !!

                      【讨论】:

                        【解决方案15】:

                        检查您的 Application Event Log - 我的问题是我在 Web.config 中禁用的 Telerik RadCompression HTTP 模块。

                        【讨论】:

                          【解决方案16】:

                          当 CDN 是根目录时,请务必放置波浪号和正斜杠 (~/)。我认为这是 IIS 中的问题

                          【讨论】:

                            【解决方案17】:

                            我也遇到了同样的问题,但这些都不起作用。就我而言,这是通过在配置文件中添加这些行来解决的。

                            <appSettings>
                              <add key="aspnet:MaxHttpCollectionKeys" value="100000" />
                            </appSettings>
                            
                            <system.web.extensions>
                              <scripting>   
                                <scriptResourceHandler enableCompression="false" enableCaching="true"/>       
                              </scripting>
                            </system.web.extensions> 
                            

                            【讨论】:

                              【解决方案18】:

                              我们也遇到了同样的问题,这个问题只能在服务器中重现(即,不能在本地,这使得修复更加困难,因为我们无法调试应用程序),并且在使用 IE 时。我们有一个带有更新面板的页面,在这个更新面板中有一个 modalpopupextender,它也包含一个更新面板。在尝试了几个不起作用的解决方案后,我们通过将 modalpopupextender 中的每个图像按钮替换为链接按钮并在其中替换所需的图像来修复它。

                              【讨论】:

                                【解决方案19】:

                                @JS5 ,我也遇到了和你一样的问题:ImageButton 只在生产服务器和 IE 上导致 UpdatePanel 内的异常。经过一番研究,我发现了这一点:

                                ImageButtons 和 UpdatePanels 存在问题。更新到 .NET 4.5 已修复。它与微软有关 将按钮单击的 x,y 轴从 Int 更改为 Double 以便您可以 告诉您单击按钮的位置并进行转换 错误。

                                Source

                                我使用的是 NetFramework 2.0 和 IIS 6,因此,建议的解决方案是降低 IE 兼容性并添加元标记:

                                <meta http-equiv="X-UA-Compatible" content="IE=9" />
                                

                                我仅在需要的页面上通过 Page_Load 方法完成了此操作:

                                Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
                                    Dim tag As HtmlMeta = New HtmlMeta()
                                
                                    tag.HttpEquiv = "X-UA-Compatible"
                                    tag.Content = "IE=9"
                                
                                    Header.Controls.Add(tag)
                                End Sub
                                

                                希望这对某人有所帮助。

                                【讨论】:

                                  【解决方案20】:

                                  正如我的朋友@RaviKumar 上面提到的,以下问题的一个原因是从代码传输到 UI 的一些数据包含原始 html 标签,这使得请求无效,例如我有一个 textarea 并且在我的代码我通过下面的代码设置了它的值

                                  txtAgreement.Text = Data.Agreement

                                  当我编译页面时,我可以在 textarea 中看到原始 html 标记,因此我将 textarea 更改为 divinnerhtml 在其上工作并渲染 html(而不是注入原始 html标记到元素中),它对我有用

                                  快乐编码

                                  【讨论】:

                                    【解决方案21】:
                                    <add key="aspnet:MaxHttpCollectionKeys" value="100000"/ >
                                    

                                    将上述键添加到 Web.config 或 App.config 以消除此错误。

                                    【讨论】:

                                      【解决方案22】:

                                      当我在更新面板中使用 ModalPopupExtender 时出现此错误...调试我的代码我发现上述错误是由于 updatepanel updatemode 是有条件的...所以我将其更改为总是这样问题就解决了。

                                      【讨论】:

                                        【解决方案23】:

                                        这不是真正的问题,如果你想知道为什么会这样,请转到 IIS 的错误日志文件。

                                        如果是 Visual Studio,请导航到:

                                        C:\Users\User\Documents\IISExpress\TraceLogFiles\[your project name]\.

                                        在此处按日期降序排列文件,然后打开第一个文件。

                                        它看起来像:

                                        现在向下滚动到底部以查看GENERAL_RESPONSE_ENTITY_BUFFER 这是实际的问题。现在解决它上面的问题会自动解决。

                                        【讨论】:

                                        • 谢谢!很惊讶这没有任何赞成票。我在这个问题上浪费了很多时间,但结果发现我有一个Maximum request length exceeded 错误。 web.config 中的一行更改解决了我的问题。如果其他人有此问题,请检查 here 以获取修复
                                        • @grizzasd 你是救生员。我不知道这是我的问题。我有一个隐藏的输入字段,里面有一个巨大的 JSON 字符串。我必须对其进行优化以不引发错误。赞一个!
                                        【解决方案24】:

                                        我遇到了同样的问题,在这里我给出我的问题和我的解决方案,希望这对某人有所帮助:

                                        按照其他人的建议,我去了服务器的日志(在我的例子中是 Windows Server 2012):

                                        控制面板 -> 管理工具 -> 事件查看器

                                        然后在左边:

                                        Windows 日志 -> 应用程序:

                                        在警告中,我发现了来自我网站的消息,在我的情况下,它是由于一个空引用:

                                        *Exception type: NullReferenceException 
                                        Exception message: Object reference not set to an instance of an object.*
                                        

                                        然后检查日志中描述的函数,我发现了一个未初始化的对象,就是这样。

                                        所以它可能是代码中的空引用异常。 希望有人觉得这很有用,问候。

                                        【讨论】:

                                        • 这个!!!对我来说,我正在使用 JetBrains Rider,这个答案启发我暂停所有异常,我可以阅读异常消息
                                        【解决方案25】:

                                        这在我的代码中运行良好..我解决了我的问题..真的

                                        web.config 文件中添加以下代码。

                                        <system.web>
                                            <httpRuntime executionTimeout="999" maxRequestLength="2097151"/>
                                        </system.web>
                                        

                                        【讨论】:

                                          【解决方案26】:

                                          对于使用 Visual Studio 内部 IIS 的用户,请尝试以下操作:

                                          1. 生成错误消息。
                                          2. 在错误显示时中断调试器。
                                          3. 检查调用堆栈。您应该会看到“raise”。
                                          4. 双击“加注”。
                                          5. 检查'sender'参数的内部。您将看到一个“_xmlHttpRequest”属性。
                                          6. 打开“_xmlHttpRequest”属性,您将看到一个“响应”属性。
                                          7. “response”属性将包含实际消息。

                                          我希望这对那里的人有所帮助!

                                          【讨论】:

                                          • 感谢使用调试器提示,真的很有帮助,我没想过使用它
                                          【解决方案27】:

                                          我的答案是修复一个 gridview 控件,该控件包含一个模板字段,该模板字段具有一个下拉列表,该下拉列表加载了 monstrous 数量的可选项目-我将 DDL 替换为一个标签字段,其数据为由函数生成。 (我最初打算允许 gridview 编辑,但已切换到允许在单独的面板上进行编辑,该面板仅显示该记录的该字段的 DDL)。希望这可能对某人有所帮助。

                                          【讨论】:

                                            猜你喜欢
                                            • 2022-01-09
                                            • 2010-09-22
                                            • 1970-01-01
                                            • 2012-01-27
                                            • 1970-01-01
                                            • 2021-09-18
                                            • 1970-01-01
                                            • 1970-01-01
                                            • 2022-11-24
                                            相关资源
                                            最近更新 更多