我有一个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
(即{{1 }},我得到一个例外:
[InvalidOperationException:Stack empty。] System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)+52 System.Collections.Generic.Stack`1.Pop()+ 6856361
Microsoft.VisualStudio.Web.PageInspector.Runtime.WebForms.SelectionMappingRenderTraceListener.EndRendering(TextWriter writer,Object renderedObject)+84
System.Web.UI.RenderTraceListenerList.EndRendering(TextWriter writer,Object renderedObject)+66
System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer,ControlAdapter adapter)+170
System.Web.UI.Control.RenderControl(HtmlTextWriter writer,ControlAdapter adapter)+9796138
System.Web.UI.Control.RenderControl(HtmlTextWriter writer)+25
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)+1303
显然,此错误是由Visual Studio浏览器链接功能(或其后续功能)引起的。如果我禁用它,错误就会消失。
在this question,here以及over here等其他情境中也讨论了同样的问题,但仅举几例,并提出了一些修正建议。但是,修复程序都与完全或部分禁用浏览器链接或页面检查器功能有关。
我想知道是否有人通过在我的代码示例的public override void RenderControl
方法中更改代码,引入某些内容或其他内容的检查来防止错误发生?