1

最近、using: someControl.Attributes.Add("customAttr", "customVal") がすべての Web ブラウザーと互換性があるわけではないことを発見しました。カスタム属性の推奨される登録は次のとおりです。

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

さて、ここで問題です。ListView を使用してカスタム コントロールを生成しています。特定のシナリオでは、ListView を更新または再作成する必要があります。これが発生し、ListView アイテムが expando 属性の登録 (この場合は再登録) を試みると、ページは次のエラーをスローします。

同じキーを持つエントリが既に存在します。

明らかに、RegisterExpandoAttribute() は、キーが既に存在する場合に現在の値が上書きされる Page.Cache オブジェクトのようには動作しません。この問題を簡単にハックできますが、もっとエレガントな解決策があるのではないかと思います。たとえば、次のようなメソッドはありません: Page.ClientScript.IsExpandoAttributeRegistered(...)

何か案は?

4

1 に答える 1

1

カスタム コントロールを作成している場合はRegisterExpandoAttribute、コントロール中に呼び出しを行ってみてくださいPreRender。コントロールが削除された場合、属性がまだ登録されているという問題があり、それによって問題が修正されました。コントロールを呼び出している場合RegisterExpandoAttributePreRenderページの読み込みごとに複数回呼び出すべきではないと思います。

于 2013-03-25T13:50:02.720 に答える