2016年12月8日木曜日

ASP.NET MVC 09_Razorビューエンジン ~Razor構文 その2~

VisualStuidioCommunity2015/Fw4.5.2/C#


前回に続いてRazorの構文を見ていきます。

「@using」で名前空間をインポート

Razorは標準でだいたいの名前空間をインポートしてくれますが、インポートされない名前空間は「@using」でインポートすることができます。
@using MyApp.MyExtensions;

@{ 
    bool ret = string.Empty.MyExtensionMethod();
}

「@if」コードブロックで条件分岐

コードブロック内ではifを使用できますが、コードブロック外でifを使用したい場合は「@if」コードブロックを使用します。
@{ int num = new System.Random().Next(1, 10); }

@if (num % 2 == 0)
{
    @:偶数
}
else
{
    @:奇数
}

「@switch」コードブロックで条件分岐

@switch (num)
{
    case 2:
        @: numは2です。
        break;
    default:
        @: numは2以外です。
        break;
}

「@for」コードブロックで繰り返し処理

@{ int max = 10; }
@for (int i = 0; i < max; i++)
{
    

@i

}

「@foreach」コードブロックで繰り返し処理

@{ int[] nums = { 2, 4, 6 }; } 
@foreach (int val in nums)
{
    

@val

}

「@while」コードブロックで繰り返し処理

@{ int counter = 1; }
@while (counter < 10 )
{
    

@counter

counter++; }

「@functions」コードブロックでメソッドやプロパティを定義

「@functions」コードブロック内ではメソッドやプロパティを定義できます。
@functions
{
    // メソッド定義
    bool isEven(int num)
    {
        bool ret = false;
        if (num % 2 == 0)
        {
            ret = true;
        }
        return ret;
    }

    //プロパティ定義
    string _str = "Hello";
    String Str
    {
        get { return _str + " World"; }
        set { _str = value; }
    }
}

8は偶数:@isEven(8)

プロパティの値:@_str / @Str

通常のコードブロック内でメソッドを定義したければ、匿名メソッド使えばよさそうです。
@{ 
    Func<int, bool> isOdd = (val) =>
    {
        bool ret = false;
        if (num % 2 != 0)
        {
            ret = true;
        }
        return ret;
    };
}

8は奇数:@isOdd(8)


条件付きナゲット (ASP.NET MVC5 以降)

コードナゲットを属性に使用すると、式が「trueである」又は「nullでない」場合にのみ属性が生成されます。

たとえば下記の例であれば、
式「styleRed」はnullではないので、style属性は出力されます。
式「styleNull」はnullなので、style属性自体が出力されません。
@{ string styleRed = "color:red"; }

style = color:red

@{ string styleNull = null; }

style = null

実行してソースの表示で出力されたHTMLを確認した結果です。

style = color:red

style = null

0 件のコメント: