公司有一个简单功能的PrintPanel,这两天却一直用不上,报以下的错误:
[ArgumentException: 已存在具有相同键的条目。]
System.Collections.Specialized.ListDictionary.Add(Object key, Object value) +283
System.Web.UI.ClientScriptManager.RegisterExpandoAttribute(String controlId, String attributeName, String attributeValue, Boolean encode) +237
System.Web.UI.WebControls.BaseValidator.AddExpandoAttribute(Page page, HtmlTextWriter writer, String controlId, String attributeName, String attributeValue, Boolean encode) +105
System.Web.UI.WebControls.BaseValidator.AddAttributesToRender(HtmlTextWriter writer) +188
System.Web.UI.WebControls.RequiredFieldValidator.AddAttributesToRender(HtmlTextWriter writer) +21
System.Web.UI.WebControls.WebControl.RenderBeginTag(HtmlTextWriter writer) +17
System.Web.UI.WebControls.BaseValidator.Render(HtmlTextWriter writer) +459
System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +53
System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +294
System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +24
System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +199
System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +21
System.Web.UI.WebControls.WebControl.RenderContents(HtmlTextWriter writer) +7
System.Web.UI.WebControls.WebControl.Render(HtmlTextWriter writer) +29
实在是看不懂,而.NET又不像Java一样是开源的,可以一直跟进去看代码。网上又查不到错误。只好还是回到唯一的线索:StackTrace。发现是从BaseValidator.AddExpandoAttribute这个私有方法抛上来的,于是把Validator都去掉了,发现没问题了。研究了一会儿过后,发现应该是ClientScriptManager里把相同的Javascript给注册了两次造成的。把Validator设成Disable没用,只有Visible=false管用。