Validator原来不可以Render两次

公司有一个简单功能的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管用。

Leave a Reply

Your email address will not be published.