@IT少しずつ順番に見ていこうと思います。順番なのでまずはArea機能。MVC)してて、V1のPreviewのいつだか忘れたんですがRouting登録時にControllerのnamespaceを指定出来るようになってるんです。それを使って違うnamespaceのControllerを指定することを"Area"と呼んでるという感じです。RouteControllerへのArea登録用拡張メソッドの作成でV1は実現して他のをV2では最初から用意しといたら便利かもね~、な流れ(特に開発規模が大きくなって分業始める事を考えると)でしょうか。いっても上記記事を見てもやり方は書いてないのでサッパリ分からないですよね。今回からはMSDNにすでにドキュメントが用意されてます。AreasMSDNマガジンを機械翻訳にするなら、その分のリソースをこっちにさいて日本語化しといてくれよ、なんてぼやきは無しでいきましょう。2のプロジェクトを作成。”MainSite”という名前で作ってみました。そうそう、V1とV2はそれぞれ参照するアセンブリが違うので、一緒にインストールしててもなんの問題もないので、ガンガン入れて試すといいと思います。プロジェクトテンプレートももちろん最初から日本語版のVSで動きますね。ドキュメントに書かれてる手順でサブプロジェクトを作っていきましょう。ソリューションに新しく「ソリューションフォルダ」を追加して、その中に"Sub1"と"Sub2"という名前でMVC2のプロジェクトを作成。もって、不要なファイル達をゴッソリ削除。Controllersフォルダとルートのweb.configだけが残ってればよろしデス。↑こんなようになってればOK。ルーティング登録用のファイルを各サブプロジェクトに作っておけと、ドキュメントに書かれてるのでそれに従います。ん?それだと面白味に欠ける?分かりました。MainSiteのルーティングにまとめて書くやり方でやってみましょう!(本来はきちんと分けた方が機能分離出来て分担しやすいはずです)MainSiteのGlobal.asaxのルート登録を以下のように書き換えます。}デフォルトで登録されてるMapRouteがコメントアウトになって、MapAreaRouteで登録し直してるのには理由がありまして、Areas内のHome/Indexを表示したりしてるときに、MainSiteへのリンクをActionLinkで出力する際にエリア名を指定しておく必要があるんですね。その時、デフォルトの登録だとエリア名がないので、ちゃんとリンクを出力できなくなります。気をつけて!MainSiteのHome/IndexにSub1とSub2へのリンクを書きます。/></asp:Content>これで一度動かしてみます。リンクをクリックしてもエラーでない。Viewを作成してないのですべてのリンクで全く同じViewが出てきます。この状態でレンダリングされるHTMLは↓こんな感じで予想通り。/>そりゃそうっすね。なんの説明もなくここまで進みましたが、少し捕捉。MapAreaRouteの台1引数のエリア名とActionLinkなんかで指定するRouteValueDictionaryのarea指定が一致しないとちゃんと解決出来ないので気をつけましょう。上記の例で言えばAreasSub1/AreasSub2がそれぞれエリア名に当たるんで、同じものをActionLinkのareaに指定しなきゃダメです。あと、まだPreviewだからだと思いますが、今のところHtmlAttributeの指定がなくてもActionLinkの引数にはnull指定で全部していするようにしないと、これまたリンクが出力されません。overload実装が部分的。続いて、Sub1/Sub2用のViewを定義します。これがデスね、勘でやってると気がつかない(Sub1/Sub2のプロジェクトにおきたくなるよね?)んですが、MainSiteに置いておく必要があります。いや、必須じゃないけどWebFormViewEngineを書き換えれば他のプロジェクトに置いておいてもいいけど、デフォルトはメインのプロジェクトのViewsフォルダを探すようになってるので、その辺気をつけましょう。MainSite/Views/Areas/AreasSub1/Home、MainSite/Views/Areas/AreasSub2/HomeにそれぞれのIndex.aspxをおきます。ここでもAreasSub1/AreasSub2とルーティングで指定したエリア名を使う事になってます。<h2>AreasSub2のHome/Index</h2></asp:Content>と、しておきます。ドキュメントには以下のようなサンプルが載ってるので、これで試して見るとルーティングのデータが見れるので分かりやすいかも。</div></div>areaの情報(どこのnamespaceを参照するのか)が、DataTokensに入ってControllerの解決時に参照されるのが分かりますね。ソースをテケテケ追いかけてみるとですね、MapAreaRouteがMapRouteを呼び出した後に、Defaults/Constraints/DataTokensそれぞれにareaを設定してる。内部ではこれまで通り"Namespaces"で参照するようになってるので、DefaultControllerFactoryでControllerTypeを取得する部分のコードには変化無しです。実際には、これだけだと、Home/Aboutそれぞれの参照先がs1/s2のArea内に入ってしまって、MainSiteを参照しなくなってしまうので、そこら辺のActionLinkにもすべてareaを指定するように変更する必要があります(デフォルトのMapRouteを消した理由はココに絡んできます)。1」というのがありまして、同じプロジェクト内でのAreaの作り方を説明してくれてます。こっちのほうがViewsも分離(WebFormViewEngineのパスを変更)出来るし、最初からこの方がいいんじゃないかと思わずにはいられないところです。MVCはV2になっても目が離せないですね。Forumsにあがってたので紹介。ForumsViewへViewDataを型付きで指定して渡すとき、インターフェースを指定して渡す事も出来るんですが、その時に渡されたインスタンスを使ってEditorForで出力しようとすると型が分からないといってInvalidOperationExceptionが発生するという話。解決策としてはダサイけどEditorForに"Object"と固定でテンプレート名を渡すことで、デフォルトテンプレートを参照してくれるようになるんだそうです。Issuesにちゃんと書かれてるけど、解決方法は書かれてないよね。今回みたいに複数のMVCプロジェクトをソリューションに追加して実行した場合、アプリケーションのインスタンスがプロジェクト毎に起動して(今回なら3つ)無駄使い感が漂います。以下のようにデバッグ時に起動しないようするとエコなんじゃないかなと思うところです。V22009年8月4日火曜日LIFE歌ネットはいつからログインしなくても良くなったんだろう。[無料]歌詞検索の歌ネット今朝、この歌の歌詞を口ずさまずにはいられなかったのは、昨日のめざましライブがキマグレンだったからなわけじゃない。泣きたくて、笑いたくて...。いや、まじ、もうメガネかけたまま寝るのはやめようよ。話変わって、土曜日、恒例の港南区子供会主催(港南区関係無いのに呼ばれるのはナゼなんだ...)のアイススケートイベントのお手伝い。朝8時から3コマ使って15:30まで氷に乗りっぱなしでした。子供達相手に一緒にスケート滑ったり教えたりするんだけど、ずっと中腰で疲れたっす。ホッケーして見せたりして楽しかったよ!朝一はすっからかん。ホッケー体験コーナーもあり。全3枠で756人だって。次回は来年2月6日だそうで。リンクの予約は入れてるからスケジュール空けといてだってさ。V2のチラ見やっと、ため込んだFeedの処理に追いついて、ビデオの確認ができた。9内容も15分と短いので、是非。ことで、このビデオ見つつ少しだけv2のソースも少しだけ確認。Editor/EditorFor(EditorTemplateフォルダ)、Display/DisplayFor(DisplayTemplateフォルダ)がそれぞれあって、なおかつLabelForがFuturesから標準に入ってきてる。Dataで使われてるTemplateベースのレンダリングを参考に拡張方法を変えたのかな。TextBoxFor。TemplateHelperがかなり重要なポジションをしめる気がする。ModelBinderの時と同じようにDefaultDisplayTemplate/DefaultEditorTemplateを用意して、ある程度は自動テンプレート出力をしてくれる模様。リリースノートをチラ見した時には「えぇ~、そっちかよ~!」と思ったけど、中身を見ると素敵かも。MVCらしさをそのまま引き継いだ上での拡張っす!System.Web.UI.WebControls.DataBoundControlModeがInitializeDataCellやDataControlRowStateを使わなくて良くしてくれてるんでしょう。Released↑ここにも書かれてる通り、Preview1ではそれほど大量の機能追加はなくて、Preview2が本気リリースっぽい。V2に関しても順を追って追いかけて行くことで、一度に沢山の機能を調べなくて済む感じです。DataAnnotationsの取り込みがどの程度のものなのか。その片鱗をこのビデオで垣間見れた気がします。Dataと同じくらい取り込もうとしてますね。DataType、DisypayNameにUIHint、それらもしっかりとUIの出力(TemplateHelperとDefaultEditorTemplate)に反映されてる。前まではDataAnnotaionModelBinderを使って、システムに対して入力方向での連携で入力値検証でしか利用してなかったのが、V2からは出力方向にもしっかり活用。Templateベースの出力になってるのもうなずける。大枠はいつものごとく、ガスリーさんところで書かれてるから、そこで確認。released!)にも簡単な説明が出てるので、これから少しずつ見ていこうと思います。この週末でちゃんと調べる予定だったのに、全然観れなくてちょっと残念...。2.4.0.1について。早くMVC祭りに参加したいところだけど、そこは焦らずに少しずつ...。more前回のT4MVCの投稿でActionNameをサポートするようttファイルの書き換えを行ったけど、新しいバージョンではしっかりとその辺も含めた改良が施されてます。ActionNameで名前を変えたものを指定したいからと、たけはらエディションを使う必要は全く無くなりました。やってActionName属性を取り出すのかなと確認したところ、メソッドのCodeAttribute2を取り出してActionNameAttributeが付いてるかを見てました。ActionMethodInfoが変更かかってるのも合わせて、やり方はだいたい同じですね。間違ってなくてホッとした。変更前のAction名が選択肢に出てくるあたりの仕様も同じだし。HomeControllerに以下のIndexPostを追加してみる。}このIndexPostを参照するようにIndex.aspxにFORMを書いてみる。%>結果、出力されるHTMLは↓。</form>それから、既定ではMVCがクラス名だったり、ViewsフォルダやControllersが固定だったけど、今回からT4MVC.settings.t4というファイルで変更出来るようになってます。MVC.Home.~じゃ無くてMy.Home.~とかに変更も可能。サブディレクトリを再帰(なんちゃらRecursive関数達)で潜っていくようになってるので、より実用的に。Actionの引数をなくしたoverloadを定義してるみたで、上記BeginFormの書き方を以下のように変えてもOKらしい。%>だけど、これで出力されるURLがなんかキモイ。</form>変なの。思って出力されたコードを確認してみたけど、今回のような使い方の場合、上記のようにBegineFormを使うと、標準のHtmlHelper.BeginFormが呼ばれるから変なURLになる。%>ちゃんと、FormMethodを指定しましょう。ないと、T4MVCで定義してるBeginFormのoverloadに入ってこないもん。すれば、ちゃんとURLが出てくるようになりました。ちなみにルーティング登録時(MapRoute)でもマジックストリングを使わずに登録できるようになってるT4MVC。楽しみ昨日、今期MHLのプレーオフ初戦でした。なんか、切ないけど、まぁ、しょうがないか。個人的にそうは思ってても、チームメイトはどう思ってるのかな~。そんなこんなで、アッサリと夏も終わり(球児じゃないけど)、後はのんびりとホッケーして次期シーズンに備えるだけなわけですが、なにやら次期はエントリーチーム数が多すぎるみたいで抽選らしい。抽選に落ちたら全く試合に出れなくなっちゃうね~。他のチームで出たいとも思わないしな~。抽選落ちしないことを祈るのみ。試合が午前中で終了したから、午後戸塚に一汗かきに移動。スズキ君も来て久しぶりにシャキッとしたホッケーもできて面白かったよ。あれだよね、マッチョな感じが楽しい時間をダメにするっていうのもあるよね。ピックアップっていうと、その時にいる人それぞれ全然違うポイントを楽しいと感じるわけで。上達することだけを目的にするのもいいし、単純にそこにいるメンツでホッケーするのが楽しいからっていう理由だけでプレーする自分みたいな人もいるし。サヨちゃんとの対戦だけを楽しんだりするのも楽しみ方だと思うわけですよ。マッチョもいいと思うけど、それをみんなの共通の目標とか楽しみだっていう価値観はとても狭い世界でしか物を見れなくなりかねないぜ?なんてね。2009年7月18日土曜日あちゃ~!おちゃ~!いや~、2週間沈黙だったっす。なんか先週もちゃんとエントリ書いたんだけど、書いた後に恐ろしい勘違いエントリだと気がついて即削除。読まれたらちょっと恥ずかしい内容だったんで、修正とかじゃなく削除しちゃいました。ルーティングとURL引数(QueryString)を超勘違いしてた。メッセージが表示されるで無理矢理できるってことで(Routingには関係無い話でした)。こないだ大事件が起きて。キーボード(パソコンの)はこだわりの逸品を使いたいじゃないですか。普段からノートPC使ってるとデスクトップのキーの深さに疲れちゃうから、お気に入りは薄いキーボードなんですよね。ぬたーん、とした感じがいいじゃないですか。もんで、使ってるのは電源メーカーで有名なENERMAXのアルミ削りだしキーボード(KB007U-B/KB007U-S)なのね。ThinkPadのパームレストが熱いのとは雲泥の差。「今週会社がつぶれます」のエントリは書いてないけど、そんな感じで新しい会社に移ったて、そこでももちろんこのお気に入りキーボードを使うデスよ。マウスもお気に入り使うデスよ。ーさんなんかごつい体型なのにキーボードは弁当箱か!ってくらい小さいデスよ。いつものように解決方法が思いつかない~と、もんどり打ってたらコップを倒した...。これがまた奇跡のような倒れしてキーボードの上にこてーんと。キーボードに向かって倒れたんだ...。コップの中身が全部キーボードに注ぎ込まれるじゃないですか。帰ろうかと思ったけど、まだ14時...、みたいな。こぼしたのはお茶だったから慌てて拭いてキーボードを外に干した。乾いたところでつなげてみたらなんとなく普通に使えてホッとしたけど。あれだよね、コップは気をつけないとね!そういえば、前にもコーヒーをこぼした気がする...。コーヒーとお茶にまみれてもがんばって動くキーボードにはこれからも耐え続けてもらいたい。ちなみにドラクエも全然進まない。男らしさってなんですか?前回のエントリーに引き続きT4MVCです。前回判明したのが、ActionName属性を指定したアクションはオリジナルのアクション名でしかMVCクラスに展開されないというもの。改善リリースを待つか、自分でttファイルをいじるのか、どっちが男らしいかというところで、とりあえず逃げの一手を打ったんでしたね。このままじゃべーさんにどやされる。週明けに「この腰抜けが!」なんて言われた日には、枕を涙でぬらす日々。文太」とたたみかけられる。面白そうなものを見つけたんだから、T4追いかけてみるかと、VSでソースを開くと真っ白背景に白の文字。あ、コードハイライト効かないんだった。Professionalエディションを$99.99払ってまでは使い込まないだろうから、Communityエディションで。Generatorエディション出たら買ってもいいかもね。インストールして早速T4MVC.ttファイルを開いてみると...。