VB.NET で Razor記法を試す

ASP.NET MVC3 といえば Razor が重要なポイントですが、それをVB.NETでやろうとするとどうなるのか。

基本的には@の使い方なので、C#とさしたる違いはなさそうに見えます。が、そうも行かない微妙な差異があります。
C# だと .cshtml だったのが .vbhtml になるというファイルの拡張子の話もありますが、まぁそれは置いておきます。

まず、いきなり一行目から違います。

@ModelType ...[モデル名]

同じコードをC#で書くと…

@model ...[モデル名]

となります。Visual Studio からViewの追加を行った場合には自動的に追加してくれるのですが、サンプルをコピって…という場合には一瞬困ります。

次はこちらです。

@Code
    ViewData("Title") = "ホーム ページ"
End Code

これをC#にすると

@{
    ViewData["Title"] = "ホーム ページ"
}

となります。この”Code” “End Code” がなんともかんとも…という感じです。

この冒頭部を乗り越えてしまえば、.vbhtml内はC#とほとんど…と言いたいところですがそうは行きません。
たとえば、ループ処理内で詳細ページへのリンクと国名・国コードを出すようなコードはこんな感じになります。
(AdventureWorks の CountryRegion, CountryRegionCurrency を使って書いた例です。)

    @For Each country In Model
        @<tr>
            <td>@Html.ActionLink("詳細", "Detail",New With{.CountryRegionCode = country.CountryRegionCode}) </td>
            <td>@country.Name [@country.CountryRegionCurrencies.Count]
            <td>@country.CountryRegionCode</td>
        @</tr>
    Next   

Forループの書式もですが、匿名オブジェクトの作成方法と初期化方法にも注意が必要です。
匿名オブジェクトはMVC3では頻出です。New と With に気をつけてサンプルから持ってきても”.”を忘れがちです。

さらに、詳細ページでは…

        <td>@Html.DisplayFor(Function(x) x.CountryRegionCode)</td>
        <td>@Html.DisplayFor(Function(x) x.CurrencyCode)</td>

Html.DisplayFor など、引数にLinqの式をとる構文の場合、このような冗長な感じになってしまいます。
この例では一行で済んでいますが、複数行で”End Function”まで書く羽目になった日にはかなり涙目です。

やはり、VB.NETでのラムダ式は、もう少し簡素な方式を望みたいところであります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Spam Protection by WP-SpamFree