【问题标题】:System.InvalidOperationException: Stack emptySystem.InvalidOperationException:堆栈为空
【发布时间】:2013-12-22 18:39:03
【问题描述】:

在运行 Visual Studio 2013 中构建的 ASP.NET 4.x 应用程序后,我得到以下异常。

我已尝试通过删除页面检查器程序集来禁用 PageInspector

<assemblies>
    <remove assembly="Microsoft.VisualStudio.Web.PageInspector.Loader, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</assemblies>

并将此配置添加到应用设置

<appSettings>
    <add key="PageInspector:ServerCodeMappingSupport" value="Disabled"/>
</appSettings>

没有任何帮助。

[/Pages/TargetPage.aspx] System.Web.HttpException (0x80004005): Exception of type 'System.Web.HttpException' was thrown. ---> System.Web.HttpUnhandledException (0x80004005): Exception of type 'System.Web.HttpUnhandledException' was thrown. ---> System.InvalidOperationException: Stack empty.
   at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
   at System.Collections.Generic.Stack`1.Pop()
   at Microsoft.VisualStudio.Web.PageInspector.Runtime.WebForms.SelectionMappingRenderTraceListener.EndRendering(TextWriter writer, Object renderedObject)
   at System.Web.UI.RenderTraceListener.RenderTraceListenerList.EndRendering(TextWriter writer, Object renderedObject)
   at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
   at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
   at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
   at System.Web.UI.Page.HandleError(Exception e)
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
   at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
   at System.Web.UI.Page.LegacyPageAsyncInfo.<CallHandlersPossiblyUnderLock>b__32(Object o)
   at System.Web.HttpContext.InvokeCancellableCallback(WaitCallback callback, Object state)
   at System.Web.UI.Page.LegacyPageAsyncInfo.CallHandlersPossiblyUnderLock(Boolean onPageThread)
   at System.Web.UI.Page.LegacyPageAsyncInfo.CallHandlers(Boolean onPageThread)
   at System.Web.HttpAsyncResult.End()
   at System.Web.UI.Page.LegacyAsyncPageEndProcessRequest(IAsyncResult result)
   at System.Web.UI.Page.AsyncPageEndProcessRequest(IAsyncResult result)

有什么方法可以避免异常吗? 非常感谢您的任何建议

【问题讨论】:

    标签: asp.net asp.net-4.0 visual-studio-2013


    【解决方案1】:

    我发现了问题。将如何在 GridView 中生成控件的 ID 从默认更改为

    ClientIDMode="Predictable" ClientIDRowSuffix="ID"
    

    这导致了异常。不知道为什么 PageInspector 堆栈空隐藏了真正的异常。只需将更改还原为原始更改即可解决问题。

    现在例外情况不同了(但一旦 GridView 设置恢复到原来的状态也会消失)

    System.ArgumentException: An entry with the same key already exists.
    

    【讨论】:

    • 谢谢,添加 为我解决了问题!
    • @mybrave:您能否为“PageInspector:ServerCodeMappingSupport”键写一个答案,因为这似乎是很多人的解决方案(对我来说也是如此)。
    【解决方案2】:

    我有同样的例外,但在我的情况下,问题是缺少以下内容:

    <form runat="server">
    </form>
    

    【讨论】:

      【解决方案3】:

      我还在使用 Visual Studio 2013 并启用“浏览器链接”的开发机器上运行的一些 Web 应用程序中看到了这个问题。

      在我见过的多种情况下,启用浏览器链接会导致各种问题,包括客户端脚本和安全警告,以及像这样的服务器异常(令人烦恼的是它似乎默认启用,谢谢 Msft! )

      【讨论】:

        【解决方案4】:

        我在 VS 2013 中禁用了浏览器链接,并且能够看到错误的实际原因。当设置浏览器链接时,它通常是底层的东西。您可以在此处查看如何禁用它:http://www.poconosystems.com/software-development/how-to-disable-browser-link-in-visual-studio-2013/

        【讨论】:

        【解决方案5】:

        原因有很多

        System.Web.HttpUnhandledException (0x80004005): Exception of type 'System.Web.HttpUnhandledException' was thrown. -
        System.InvalidOperationException: Stack empty.
        Microsoft.VisualStudio.Web.PageInspector.Runtime.WebForms.SelectionMappingRenderTraceListener.EndRendering(TextWriter writer, Object renderedObject)
        ...
        

        按照建议添加后:

         <appSettings>
           <add key="PageInspector:ServerCodeMappingSupport" value="Disabled"/>
           ...
         </appSettings>
        

        我注意到我在创建问题的下拉列表中选择了重复的项目。

        【讨论】:

          【解决方案6】:

          希望这对某人有所帮助。

          当我的asp:panel 有一个默认按钮 XYZ 并且我修改了名称 XYZ 并忘记在面板中更改默认按钮名称时,我收到了这个错误。

          【讨论】:

            【解决方案7】:

            如果标签上的 AssociatedControlID 与无法找到的控件相关联,则会发生这种情况。

            【讨论】:

              【解决方案8】:

              就我而言(ASP.NET 4.6,Visual Studio 2015) 我注释了一个 asp 文本控件并添加了一个新的 asp 下拉列表,但没有更新关联标签的 AssociatedControlID。

              在将 AssociatedControlID 更改为新添加的 asp 下拉列表 ID 时,我的问题已解决。

              【讨论】:

                【解决方案9】:

                我们从 VisualStudio 2012 解决方案文件启动了 VisualStudio 2015 (vs2015),并且在构建所有项目时都没有构建。这是由于默认启用了启用浏览器链接选项。我禁用了启用浏览器链接选项并重新构建了成功构建所有项目的解决方案。在此之后,我在浏览器中启动了 url,然后 Boom 成功了!对于那些像我一样有类似情况的人。试一试!

                【讨论】:

                  【解决方案10】:

                  当我向我的页面添加新的&lt;asp:Panel&gt; 并将DefaultButton 设置为面板外的按钮时(错误地),这发生在我身上。 当我在面板内将DefaultButton 更改为另一个时,错误已修复。

                  【讨论】:

                    【解决方案11】:

                    在我的例子中,因为我在将网站从 VS2002 迁移到 VS2015 时遇到了很多问题,所以我决定在 VS2015 上创建一个新项目,并将所有 Web 表单从旧项目 (VS2002) 转移到新项目 (VS2015)。

                    新项目有一个 Site.Master 页面,它已经有一个标签。因为我是在不修改的情况下传输旧的网络表单,它们也已经有一个标签,所以每个试图加载的页面里面都有两个标签。

                    当我删除每个页面上的标签,只在 Site.Master 页面上留下一个标签时,问题就解决了。

                    我希望这会有所帮助。

                    【讨论】:

                      【解决方案12】:

                      我在选择不同的下拉值时遇到了这个问题,下面是问题的解决方案

                      先清除下拉选择的值,然后启用其他下拉值选择

                      dropdown.ClearSelection();
                      dropdown.Items.FindByValue(result.Birthday.Value.Year.ToString()).).Selected = true;
                      

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 2016-07-07
                        • 1970-01-01
                        • 1970-01-01
                        • 2012-10-15
                        • 2018-11-15
                        • 1970-01-01
                        • 1970-01-01
                        • 2013-03-13
                        相关资源
                        最近更新 更多