1

我有一个 4.6 版的 WebForms 网站和一个简单的自定义 WebControl。当我做类似的事情时:

[PersistenceMode(PersistenceMode.InnerProperty)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public SomeControl Contents { get; set; }

public override void RenderControl(HtmlTextWriter writer) {
    // Simplified code
    Contents.RenderControl(writer);
}

...我可以在页面中插入控件一次,一切都很好。但是,如果我多次插入控件,或者如果我像Contents上面的示例一样添加另一个属性,然后RenderControl在本地覆盖中的两个控件上运行(即在 的主体中public override void RenderControl),我会得到一个异常:

[InvalidOperationException:堆栈为空。] System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource 资源) +52 System.Collections.Generic.Stack`1.Pop() +6856361
Microsoft.VisualStudio.Web.PageInspector.Runtime.WebForms.SelectionMappingRenderTraceListener.EndRendering(TextWriter编写器,对象渲染对象)+84
System.Web.UI.RenderTraceListenerList.EndRendering(TextWriter 编写器,对象渲染对象)+66
System.Web.UI.Control.RenderControlInternal(HtmlTextWriter 编写器,ControlAdapter 适配器)+170
System.Web.UI.Control .RenderControl(HtmlTextWriter writer, ControlAdapter 适配器) +9796138
System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25
System.Web.UI.Page.ProcessRequestMain(布尔 includeStagesBeforeAsyncPoint,布尔 includeStagesAfterAsyncPoint)+1303

显然,此错误是由 Visual Studio 浏览器链接功能(或其后续功能)引起的。如果我禁用它,错误就会消失。

同样的问题已经在其他上下文中讨论过,比如在这个问题中,在这里在这里也只是指出一些例子,并提出了一些修复建议。不过,这些修复都与完全或部分禁用浏览器链接或页面检查器功能有关。

我想知道是否有人有解决方案来通过更改public override void RenderControl我的代码示例方法中的代码来防止错误发生,引入一些检查或其他什么?

4

0 回答 0