1. ホーム
  2. asp.net

[解決済み] ASP.NET MVC 3でDateTimeを特定のフォーマットでレンダリングするには?

2022-09-09 23:16:07

質問

モデルクラスのプロパティに DateTime というタイプのプロパティがある場合、それを特定のフォーマットでレンダリングするにはどうしたらよいでしょうか。 ToLongDateString() が返す形式などです。

これを試したところ...

@Html.DisplayFor(modelItem => item.MyDateTime.ToLongDateString())

...これは例外を投げます。なぜなら、式はプロパティまたはフィールドを指していなければならないからです。そして、これは...

@{var val = item.MyDateTime.ToLongDateString();
  Html.DisplayFor(modelItem => val);
}

...これは例外を投げませんが、レンダリングされた出力は空です(ただし val は期待された値を含んでいますが、デバッガで見ることができました)。

事前にヒントをありがとうございます

編集

ToLongDateString はあくまで一例です。私が実際に使いたいのは ToLongDateString のカスタム拡張メソッドです。 DateTimeDateTime? :

public static string FormatDateTimeHideMidNight(this DateTime dateTime)
{
    if (dateTime.TimeOfDay == TimeSpan.Zero)
        return dateTime.ToString("d");
    else
        return dateTime.ToString("g");
}

public static string FormatDateTimeHideMidNight(this DateTime? dateTime)
{
    if (dateTime.HasValue)
        return dateTime.Value.FormatDateTimeHideMidNight();
    else
        return "";
}

ということは DisplayFormat 属性と DataFormatString パラメータを ViewModel プロパティに追加します。

どのように解決するのですか?

日付を特定の書式で表示したいだけなら、呼び出しだけでよい。

@String.Format(myFormat, Model.MyDateTime)

使用方法 @Html.DisplayFor(...) を使うのは、テンプレートを指定している場合や、テンプレートをベースにしたものを使う必要がある場合、例えば IEnumerable<T> . テンプレートの作成は非常に簡単で、多くの柔軟性を提供することができます。 現在のコントローラ (あるいは共有ビューフォルダ) 用のビューフォルダ内に DisplayTemplates . そのフォルダの中に、テンプレートを作成したいモデルタイプの部分ビューを追加します。 この例では /Views/Shared/DisplayTemplates という名前の部分ビューを追加しました。 ShortDateTime.cshtml .

@model System.DateTime

@Model.ToShortDateString()

そして、次の行でそのテンプレートを呼び出すことができます。

@Html.DisplayFor(m => m.MyDateTime, "ShortDateTime")