過去のバージョンから脈々と受け継がれてきたASP.NET WebFormのプログラムの改修を依頼され、UpdatePanelコントロールを使って良い感じに非同期プログラミングを行なおうと記述した時に、うまく動作しない場合がありました。
ためしに新規に作成したサイトだと、UpdatePanelコントロールがしっかり動作するので、バージョンや環境の問題ではないと判断出来たので、「web.config」ファイルを比較してみました。
system.webの「xhtmlConformance」タグの部分で設定に違いがありました。
XHTMLに準拠するバージョンを切り替える設定です。
なので、違っている部分を以下のように「mode=”Legacy“」から「mode=”Transitional“」に変更します。
<system.web> <xhtmlConformance mode="Legacy"/> </system.web>
↓
<system.web> <xhtmlConformance mode="Transitional"/> </system.web>
これで無事ASP.NETのAjax機能が動作することができました。
設定の変更によって、現在のHTML記述でうまく動作しないブラウザはまずないと思いますが、変更後は一通り挙動を確認したほうがいいでしょう。
こっそり、MSDNの「部分ページ レンダリングの概要」のメモ項目にこんな記述がありました。
レガシ描画向けに構成されている ASP.NET Web ページは、AJAX 機能をサポートしません。詳細については、「ASP.NET と XHTML」を参照してください。
詳細が気になる方は確認してみてください。
ちなみに以下のように「web.config」ファイルにlocationの設定を、ページ毎に追加設定することで、レンダリングを別々で設定することも可能です。もし影響のあった方は設定をしてください。
<location path="."><!--全体指定--> <system.web> <xhtmlConformance mode="Transitional"/> </system.web> </location> <location path="site/Legacy.aspx"><!--ここだけレガシーモード--> <system.web> <xhtmlConformance mode="Legacy"/> </system.web> </location>