3

そのため、ビデオの長さを秒単位で表示し、その長さをRazorで表示したいと思います。

現在使用しています

@TimeSpan.FromSeconds(item.Duration).ToString()

ただし、私が使用している残りのコードは

@Html.DisplayFor(modelItem => item.Description)

期間(現在はint)を取得してタイムスパンとして表示する方法はありますか?構文を使用し@Html.DisplayForます。item.durationは、データベースにintとして保持されているEntityFrameworkモデルをプルしています。

4

3 に答える 3

13

ジョン、

独自の表示テンプレートを作成します。これを行うには、次の手順を実行します。

  1. Views/Shared の下に DisplayTemplates というフォルダーを作成します。
  2. その新しいフォルダーの下に、TimeSpan.cshtml という部分ビューを作成します。
  3. ビューで、タイムスパンであるモデル プロパティに遭遇すると、TimeSpan DisplayTemplate によって自動的にレンダリングされます。
  4. モデルに新しい get プロパティを追加します。

モデルの編集 (以下を追加):

public TimeSpan MyTimeSpanProperty
{
    get
    {
        return TimeSpan.FromSeconds(Duration);
    }
}

TimeSpan.cshtml

@model TimeSpan
@string.Format("{0}:{1}:{2}", Model.Hours, Model.Minutes, Model.Seconds)

ビューで次のように呼び出されます

@Html.DisplayFor(m => m.MyTimeSpanProperty)

3:24:16など と表示されます。

これですべてです (TimeSpan 型のプロパティを渡すことを前提としているため、可能であれば、モデルに小さな変更を加えることができるかどうかを確認してください!!)

于 2012-06-27T16:50:56.977 に答える
4

partial class定義を使用してモデル クラスを拡張できます。

public partial class My_class_that_has_been_created_by_EF {
    public string Timespan {
        get { 
            return Timespan.FromSeconds(Duration).ToString(); 
        }
    }
}

次に、ビューでそれを使用します

@Html.DisplayFor(modelItem => item.Timespan)
于 2012-06-27T15:12:34.753 に答える
2

DataAnnotations名前空間とDisplayTemplatesASP.NET MVCを利用する必要があります

  1. 最初にUIHint属性でプロパティをマスクし、テンプレートを Models/YourVideoModel.cs に設定しVideoDurationます

    [UIHint("VideoDuration")]
    public int Duration { get; set; }
    
  2. プロジェクトのViews/Shared/DisplayTemplates/ VideoDuration .cshtmlにディスプレイ テンプレートを追加します (存在しない場合は、フォルダーを追加する必要がある場合がありますDisplayTemplates) 。

    @model int?
    @string.Format("{0:g}", TimeSpan.FromSeconds(Model))
    

次に、次のようにビューで使用できます。

@Html.DisplayFor(m => m.Duration)
于 2014-02-15T02:51:52.150 に答える