RepeaterとかDataGridのなかにあるコントロールをUpdatePanelのAsyncPostBackTriggerに指定したい

技術日記をつけようとして毎回挫折するのはなんとか出来るところを見せようと思ってしまうのが原因だから分からんものは分からん、調べるのが面倒だったら記憶している範囲で、不明確でもあまり深く調べず雑に書く、というところを優先していきたい。そしてまたはてなダイアリーはノイズばかり……、いや、googleの順位付けが悪い、と非難されるかもしれないが実際自分で検索していて全く話題が引っかからないより、自分と同じ悩みを持った人を見つけるほうが、それが解決しなかったとしてもありがたいのだから書いていく事にしたい。しないけど……。
UpdatePanelはAsyncPostBackTriggerとかPostBackTriggerを指定することで、ページ全体をポストバックするか、部分レンダリングで済ますか、挙動を切り替えることが出来る。指定にはコントロールのIDとイベントを指定できるので大抵の場合はこれで事足りるが、たとえば、Repeaterのなかのコントロールで、あるボタンはデータの登録を行うので非同期ポストバック、もう一つのボタンは商品の詳細にリダイレクトするのでページ全体をポストバック、などと切り替えたい場合がある。
#非同期ポストバックの場合はページの一部を読み込みに行くわけだから、当然RedirectやServer.Transferは行えない
この場合、aspxファイル内、UpdatePanelのUpdatePanelTriggerCollectionにコントロールを登録しようとしても上手くいかない。Repeaterの中のButtonやなにかは、実際にDataBindされるまで存在しない? から。
でまぁ、どうするかというと、ScriptManagerのRegisterAsyncPostBackControlメソッドを使えば、非同期ポストバックのトリガーとして登録できる。対象のRepeaterがDataBindされたあとに、Repeaterでループ回して、FindControlで一個ずつボタンを捜して登録していく。注意した方が良いのは、ScriptManagerのRegisterAsyncPostBackControlで登録というのは、コントロールの状態ではないので、DataBindした時のレスポンスだけではなく、毎回登録せねばならん、ということです。つまり、具体的にいうと、Page_DataBindじゃなくて、Page_PreRenderなど、必ず毎回実行されるイベントの中で、Repeaterをしらべて、DataBindされていたらRegisterAsyncPostBackControlする、ということをしないといけない、んではないかなー、と思う……。間違ってたら教えてください……。