開発環境がVisualStudio2012のためか、
非同期通信に必要(?)な
ScriptManagerコントロールや
UpdatePanelコントロールが使えないんです。
アセンブリ参照が不足してるとやらで・・・。
仕方がないのでいろいろぐぐってみて
ICallBackEventHandler インターフェイスとやらが使えそう・・・
(参考:アットマーク・アイティ 様 →
ページを再読み込みせずにサーバと通信を行うには?)
ということで利用してみたところ
非同期通信はできるっぽいのですが、OnClientClickイベントから
asp:TextBoxなどのサーバコントロールにアクセスしても期待している文字列を取得できない。
詳しいことはわかりませんが、恐らくページをロードしたとき格納されている値を取得しているのだと思うんです。
TextBoxクラスのTextメソッドを呼び出すと、ページ読み込み時に格納されてたテキストデータを取得していたので。。。
そしてjQuery uiのdialogと相性が悪いのかダイアログ上のサーバーコントロールは動作すらしないという・・・。
(参考:あぽなエンジニアの覚書き 様 →
ASP.NETとjQueryのDialogを使用した場合にポストバックされない)
そこで
HTTPハンドラというものを使ってみました。
(参考:ASP.NET入門 様 →
HTTP ハンドラの基本 - ジェネリック HTTP ハンドラとは?)
jQuery.ajaxでHTTPハンドラにデータをPOSTすることで
非同期通信できた!
このjQuery.ajax、contentTypeオプションでサーバーに送信するcontent-typeを弄れるみたいなんですが、
jsonで渡してもHTTPハンドラで受け取ったとき、処理の仕方がよくわからなかった為
( JavaScriptSerializer クラスが使えなかった)
初期値(application/x-www-form-urlencoded)で渡すことに・・・
妥協したところが多いですが、とりあえず非同期通信が出来たので満足な感じです
問題はアップロードして動くかどうか。。。
というよりもこの方法で良かったのだろうか