4からAjaxが少しとりいれられてます。Libraryがベース。これの使いどころはやっぱり部分更新ですよね。AJAXならUpdatePanelのような動きと言えばわかりやすいかな?とにかく動かしてみることにしましょう。4のプロジェクトテンプレートで新しいプロジェクトを作成。したら、AccountControllerとHomeContoroller、Views/AccoutとViews/Homeとか出てきます。Views/Homeの中には最初に表示されるIndex.aspxとAboutページのAbout.aspxが出来てます。HomeControllerのIndexアクションとViews/Home/Index.aspxだけを使って試してみることにします。初期のIndexアクションは↓。View();}Index.aspxは↓。</p></asp:Content>なんとまぁ、スッキリしたものが出てきますわ。※ViewData["Title"]はShared/Site.Masterで使ってますよ。IndexアクションでPOSTした値を取得してViewDataに入れようじゃないですか。View();}↓これをIndex.aspxに追加(</p>の後に)。%>こんな感じですね。POSTしたyourNameをViewData["result"]入れて、それをspanタグ内に表示するものです。ここまではすんなりです。↑こんな表示になるんで、テキストボックスに適当になんか入れて「ぼたん」押すと、↓こんな感じでボタンの横に表示されます。とびっきり普通の処理です。IndexアクションへのPOSTが発生した場合、ブラウザからのものなのかXMLHttpRequestからのものなのかを簡単に判別する方法として、Request.IsMvcAjaxRequest()というのがあるので、それを使うことにします。Indexアクションを変更。}↑太字の部分が追加したコードです。差を分かりやすくするのに、Index.aspxには追加でAjax.Formを入れることにします。Index.aspxの全体は↓。</asp:Content>これを実行すると2つのテキストボックスとボタンが表示されます。フォームも2つあるからそりゃそうですね。最初に上段のテキストボックスとボタンに”さる”と入れて上段のボタンを押します。ボタンの横に両方とも”さる”と出ます。続いて、下段のテキストボックスに”いぬ”と入れて下段のボタンを押します。小さすぎて見にくい...。それはいいとして、下段だけが"いぬ"になりましたね。結果だけを見ると分かりにくいんですけど、実際にコードを書くとですよ、上段のボタンはページ全体をPOSTで取得するのに対し、下段はボタン横のテキストのみAJAXで取得して書き換えてる動きになってるのが確認できると思います。Sourceさっそくダウンロードしてインストール。3のアンインストールが必須です。3からの変更点はそれほど大きくなくて、実装してるものはほぼそのまま移行できるというすぐれものです。!ViewDataは手を加える必要があるくらい変わりましたね。Page(aspx)でUserControl(ascx)をHtml.RenderUserControlでレンダリングするとき、第2引数にViewDataを指定しないなら、そのままUserControl(ascx)でもViewDataが参照できます。ここまでは今まで通り。4になってからはそれができなくなりました。デバッガでどうなってるのか見てみると、上記のような場合でもViewData.Modelに値が入ってしまうんですね。UserControl内でキャストしようにもできませぬ。上記の例で行くと(int)ViewData.Eval("Val1")とか、(string)ViewData.Eval("Val2")って具合です。※もっといい書き方あるかもしれないけど...。匿名クラスをViewDataとして渡すという書き方自体があまりオーソドックスじゃないかもしれないけど、新しくクラスを作るほどでもなく、複数の値をUserControlに渡したいというものぐさな人にはピッタリ(自分)。4で感激したのがAuthorizeAttributeとHandleErrorAttribute。Libraryが標準装備(scriptタグは自分で書かなきゃダメだけど)になってて、Ajax.Formなんかで部分更新(UserControlのレンダリングは見つからないけど)なんかも簡単にできるようになってますね。Ajax.Formあとはね~、そうだな~、そうだ!TempDataがSerializableになりました!TempDataProviderっていうのを実装すれば、Sessionじゃないところにも入れれるけど、そこまではちょっと...。これで自分で作ったFlashDataなんていうクラスも使わなくて済むかも!と、思ったけど、TempDataに入れたのがずっとSessionで残ったままになってて意味ないじゃん!みたいな。※StateServer指定して試しました。↑ちゃんと消えました。HomeControllerでのテスト。%>↑こんな感じで実行すると、Homeではもちろん表示されます。us"リンクをクリックすると、Aboutでも表示されます。us"リンクをクリックすると、今度は消えてます。1の処理でTempDataに値を入れます。2の処理は同じパイプラインでの実行なので、そのまま表示されます。その後、同じパイプラインでTempDataProvider.SaveTempDataでセッションに保持。一回目のAbout表示の時にTempDataProvider.LoadTempDataでセッションから取り出し、セッションをクリア。取り出したのを表示するから、ちゃんと出る。2回目のAbout表示ではセッションから消しちゃってるから表示されませんね。あってます!自分が処理間違ってました!さーせん!TempData最高!AccountControllerは結構普通だったのがちょっと残念かも。そうそう、最初に生成されるSite.Masterのcharsetが相変わらずiso-8859-1なのは、なんか意味があるんだろうか。4」というタイトルのソースの変更箇所一覧が書かれてるPDF。