最近、using: someControl.Attributes.Add("customAttr", "customVal") がすべての Web ブラウザーと互換性があるわけではないことを発見しました。カスタム属性の推奨される登録は次のとおりです。
Page.ClientScript.RegisterExpandoAttribute(someControl.ClientID, "customAttr", "customVal")
さて、ここで問題です。ListView を使用してカスタム コントロールを生成しています。特定のシナリオでは、ListView を更新または再作成する必要があります。これが発生し、ListView アイテムが expando 属性の登録 (この場合は再登録) を試みると、ページは次のエラーをスローします。
同じキーを持つエントリが既に存在します。
明らかに、RegisterExpandoAttribute() は、キーが既に存在する場合に現在の値が上書きされる Page.Cache オブジェクトのようには動作しません。この問題を簡単にハックできますが、もっとエレガントな解決策があるのではないかと思います。たとえば、次のようなメソッドはありません: Page.ClientScript.IsExpandoAttributeRegistered(...)
何か案は?