1

ASP.NET MVC 3 でタイムスパンを表示する表示テンプレートを作成し、値が設定されたプロパティのみを表示する必要があります。ここに私が何を意味するかを示すいくつかの例があります:

Timespan: 1 day, 2 hours, 3 minutes
Required display: "1 day, 2 hours, 3 minutes"

Timespan: 0 days, 2 hours, 1 minute
Required display: "2 hours, 1 minute"

Timespan: 0 days, 5 hours, 0 minutes
Required display: "5 hours"

ご覧のとおり、ゼロ以外の値のみを表示する必要があります。しかし、方法はわかりません...多くのifステートメントを含む洗練されていないソリューションは別として。もっと良い方法を見つけたい。

これが私の現在のコードです:

@model TimeSpan

@if (Model.Days > 0)
{
    @Model.Days if (Model.Days > 1)
                {<text>days</text>}
                else
                { <text>day</text>}
}

@if (Model.Hours > 0)
{
    if (Model.Days > 0)
    {
        @:, 
    }
    @Model.Hours if (Model.Hours > 1)
                 {<text>hours</text>}
                 else
                 { <text>hour</text>}
}

@if (Model.Minutes > 0)
{
    if (Model.Days > 0 || Model.Hours > 0)
    {
        @:, 
    }
    @Model.Minutes if (Model.Minutes > 1)
                   {<text>minutes</text>}
                   else
                   { <text>minute</text>}
}
4

2 に答える 2

2

少しリファクタリングするかもしれません (未テスト、@functionsテンプレート ファイルで機能するかどうかはわかりませんが、なぜ機能しないのでしょうか?)

@model TimeSpan

@functions{
    public string FormatElement(int value, string text){
        if (value == 0) return string.Empty;
        if (value > 1) text +="s";
        return string.Format("{0} {1}", value, text);
    }
}

@string.Join(", ",  new[]{
                        FormatElement(Model.Days, "day"), 
                        FormatElement(Model.Hours, "hour"), 
                        FormatElement(Model.Minutes, "minute")
                    }
                   .Where(m => m != string.Empty));
于 2013-08-19T10:42:59.013 に答える