2005年5月27日金曜日

ASP.NET 2.0のAJAXサポート

詳しくは@ITの記事の真ん中あたりを見てほしい。

string src = Page.ClientScript.GetCallBackEventReference(
control, "arg", "MyCallback", "ctx", "MyErrorCallback");

とまあ、こんなコードを書く。すると、srcには次のような文字列が入る。
WebForm_DoCallback('****',arg,CallBack,ctx,CallBackErr,true)

これはつまり、WebForm_DoCallback関数を呼び出すJavaScriptだ。****には実際にはcontrol.ClientID(これはHTMLにレンダーされたときのID値だ)が入る。

「WebForm_DoCallback関数とやらはどこで定義されてるんだよ」という疑問はごもっとも。GetCallBackEventReference()を呼び出すと、文字列を返すのと同時に、Page(Javaでいうサーブレットのインスタンスみたいなもんだ)に
<script src="WebResource.axd?d=何か;t=何か" type="text/javascript"></script>

みたいなJavaScript参照が埋め込まれるのだ。で、その参照しているJavaScriptの中にWebForm_DoCallback関数が定義されているというわけだ。

WebForm_DoCallback関数は何するものぞ。オーケイ、コピペしよう。
function WebForm_DoCallback(
eventTarget, eventArgument, eventCallback, context, errorCallback, useAsync) {
var postData = __theFormPostData +
"__CALLBACKID=" + WebForm_EncodeCallback(eventTarget) +
"&__CALLBACKPARAM=" + WebForm_EncodeCallback(eventArgument);
var xmlRequest;
var usePost = false;
if (__nonMSDOMBrowser) {
// http:
// And: http:
xmlRequest = new XMLHttpRequest();
if (pageUrl.length + postData.length + 1 > 10000) {
usePost = true;
}
if (usePost) {
xmlRequest.open("POST", pageUrl, false);
xmlRequest.setRequestHeader(
"Content-Type", "application/x-www-form-urlencoded");
xmlRequest.send(postData);
}
else {
if (pageUrl.indexOf("?") != -1) {
xmlRequest.open("GET", pageUrl + "&" + postData, false);
}
else {
xmlRequest.open("GET", pageUrl + "?" + postData, false);
}
xmlRequest.setRequestHeader(
"Content-Type", "application/x-www-form-urlencoded");
xmlRequest.send(null);
}
var response = xmlRequest.responseText;
if (response.charAt(0) == "s") {
if ((typeof(eventCallback) != "undefined") && (eventCallback != null)) {
eventCallback(response.substring(1), context);
}
}
else {
if ((typeof(errorCallback) != "undefined") && (errorCallback != null)) {
errorCallback(response.substring(1), context);
}
}
}
else {
xmlRequest = new ActiveXObject("Microsoft.XMLHTTP");
xmlRequest.onreadystatechange = WebForm_CallbackComplete;
__callbackObject.xmlRequest = xmlRequest;
__callbackObject.eventCallback = eventCallback;
__callbackObject.context = context;
__callbackObject.errorCallback = errorCallback;
if (pageUrl.length + postData.length + 1 > 2067) {
usePost = true;
}
if (usePost) {
xmlRequest.open("POST", pageUrl, useAsync);
xmlRequest.setRequestHeader(
"Content-Type", "application/x-www-form-urlencoded");
xmlRequest.send(postData);
}
else {
if (pageUrl.indexOf("?") != -1) {
xmlRequest.open("GET", pageUrl + "&" + postData, useAsync);
}
else {
xmlRequest.open("GET", pageUrl + "?" + postData, useAsync);
}
xmlRequest.setRequestHeader(
"Content-Type", "application/x-www-form-urlencoded");
xmlRequest.send();
}
}
}

IE以外にも対応してるし。おもしろいもんですね。

2005年5月24日火曜日

康隆の結婚式

早稲田教会にて。
時間を間違え遅刻するという大失態。

その後信愛学舎でパーティ。
スピーチは、もっと褒めればよかったね。でもうけは取れたからよし。

結婚自体は、ごくふつうに「良かったな。」と思う。
でもそれ以上に、友人たちに囲まれて、みんなに祝ってもらって、幸せそうにしている二人が、我が事のように嬉しい。

いい式でした。

2005年5月16日月曜日

ウサギ2

冗談のはずがパチスロで勝ってしまい、ウサギを飼うことに。

「飼うならピーターラビットみたいなのがいいなあ。」そうと決まれば下調べ。正月もあけない2000年の1月3日、行動を開始した。
近所のペットショップにもウサギはいたが、もっとたくさんの中から選びたいと思い、あちこちのペットショップに電話をかけまくった。ペットショップだけじゃなくて、里親を募集しているWebサイトも見た。そんな中、大塚のペットショップに電話したら、ウサギが10匹近くいるというので、rolioと2人で向かった。

ちょっと狭くて暗めのそこには確かにウサギがたくさんいた。ピーターラビットっぽいのもいた。ブサイクなのもいた。面白かったのが、白い色に黒斑のウサギ兄弟。彼らはみな目の周りに隈取のような模様があったのだ。「ははは、こいつら歌舞伎みたいだなあ。」と笑い飛ばした後、お目当てのピーターラビットみたいなのを抱いてみる。うん、かわいい。かわいいんだけれど…
心のどこかに引っかかるものが。そうだ、あいつらだ。あの歌舞伎ウサギ。好みとはぜんぜん違うウサギのくせに、何か心に訴えかけてくるものがある。おかしいな。かわいくないのに。かわいくないのに。
ちっくしょー、お前を連れて帰らなかったら、きっと後悔する!

運命的な出会いというのは、こういうことなのだろうか。3匹の歌舞伎兄弟の中で一番元気そうで人なつっこそうなのを選び、家につれて帰った。

2005年5月14日土曜日

Visual Studio 2005 Team System

Windows Developerマガジンに、VSTSについて原稿を書きました。次号にVSTS Beta 2 日本語版が付録添付されるのに合わせてということです。

記事の内容は機能の簡単な紹介程度です。さてどのくらい赤が入るでしょうか……