RegisterExpandoAttribute - 投掷错误

时间:2012-04-09 16:27:34

标签: asp.net custom-attributes clientscriptmanager

最近,我发现使用:someControl.Attributes.Add(“customAttr”,“customVal”)与所有Web浏览器都不兼容。建议的自定义属性注册是:

Page.ClientScript.RegisterExpandoAttribute(someControl.ClientID, "customAttr", "customVal")

好的,这就是问题所在。我正在使用ListView生成自定义控件。在某些情况下,必须刷新/重新创建ListView。当发生这种情况,并且ListView项尝试注册(在这种情况下,重新注册)expando属性时,该页面将引发以下错误:

具有相同密钥的条目已存在。

显然RegisterExpandoAttribute()的行为与Page.Cache对象不同,如果某个键已存在,则覆盖当前值。我可以很容易地解决这个问题,但我想知道是否有一个更优雅的解决方案。例如,没有类似的方法:Page.ClientScript.IsExpandoAttributeRegistered(...)

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

如果您要创建自定义控件,请尝试在控件RegisterExpandoAttribute期间执行PreRender调用。如果控件已被删除并且这样做解决了我的问题,那么我仍然遇到了属性仍然被注册的问题。我想如果你在控件的RegisterExpandoAttribute中调用PreRender,那么每页加载时不应该多次调用它。