ajaxToolkit:PopupControlExtender で No default property supported アサートがでる

1度、id:naoki0311:20070309:1173415766 のコメント欄に書いたんですが、コメントだと検索とか便がわるいのでこちらに書き直します。前エントリでは、各コントロールのいくつかのプロパティ値以外は省略していたので、各コントロールの細かい設定については記載していませんでしたが、PopupControlExtender でラベルをターゲットにするには、いくつかのプロパティを正しく設定する必要があります。
この問題は、PopupControlExtender の CommitProperty が未設定で、TargetControlID で指定されたコントロールが PopupControlExtender で未対応の場合に発生します。PopupControlExtender は AjaxControlToolkit Live Demo/PopupControl なんかを見てもわかるように、ポップアップによって選択された値を TextBox の Text プロパティにセットしたりするのが使用方法の1つです。この「セットする」部分を実施するメソッドが PopupControlExtender.Commit() メソッドです。
asp:TextBox コントロールの場合、PopupControlExtender が標準で対応しており、Commit() で与えられた文字列は asp:TextBox.Text へ代入されます。しかし、ポップアップ元を asp:Label などにしていると、PopupControlExtender は asp:Label のどの要素に与えられた文字列を設定するかを理解しておらず、PopupControlExtender.CommitProperty プロパティを参照します。この際に CommitProperty が空であったため、デバッグビルドではアサートが発生します。*1
さて、ここまでの内容を読んで、このアサートをどう解消すればよいかはわかったと思います。CommitProperty を適切に設定すること、です。
CommitProperty に設定する値は、クライアント環境における DOM Element のプロパティです。たとえば asp:Label は SPAN Element に展開されるので、その内容を書き換える場合には innerText を指定すると良いでしょう。ただし、FireFox ブラウザは innerText プロパティではなく textContent プロパティを変更する必要があります。これを簡単に切り替えるには PopupControlExtender.CommitScript プロパティを利用すると良いでしょう。たとえば、

<ajaxToolkit:PopupControlExtender ID="PopupExtender1" runat="server"
    TargetControlID="Label1"
    PopupControlID="Panel1"
    CommitProperty="innerText"
    CommitScript="if (e.textContent) { e.textContent = e.innerText; }" />

などとします。CommitScript を見るとわかると思いますが、extendee control は e という変数で参照することができ、CommitProperty に対する値の代入が実行された後で呼び出されます。

*1:ちなみに、CommitProperty なしで対応しているのは、ajaxControlToolkit 20070301 では <INPUT TYPE="text" /> に展開されるコントロールのみです。