最近,我发现使用:someControl.Attributes.Add(“customAttr”,“customVal”)与所有Web浏览器都不兼容。建议的自定义属性注册是:
Page.ClientScript.RegisterExpandoAttribute(someControl.ClientID, "customAttr", "customVal")
好的,这就是问题所在。我正在使用ListView生成自定义控件。在某些情况下,必须刷新/重新创建ListView。当发生这种情况,并且ListView项尝试注册(在这种情况下,重新注册)expando属性时,该页面将引发以下错误:
具有相同密钥的条目已存在。
显然RegisterExpandoAttribute()的行为与Page.Cache对象不同,如果某个键已存在,则覆盖当前值。我可以很容易地解决这个问题,但我想知道是否有一个更优雅的解决方案。例如,没有类似的方法:Page.ClientScript.IsExpandoAttributeRegistered(...)
有什么想法吗?
答案 0 :(得分:1)
如果您要创建自定义控件,请尝试在控件RegisterExpandoAttribute
期间执行PreRender
调用。如果控件已被删除并且这样做解决了我的问题,那么我仍然遇到了属性仍然被注册的问题。我想如果你在控件的RegisterExpandoAttribute
中调用PreRender
,那么每页加载时不应该多次调用它。