[解決済み] ASP.NET MVC 3でDateTimeを特定のフォーマットでレンダリングするには?
質問
モデルクラスのプロパティに
DateTime
というタイプのプロパティがある場合、それを特定のフォーマットでレンダリングするにはどうしたらよいでしょうか。
ToLongDateString()
が返す形式などです。
これを試したところ...
@Html.DisplayFor(modelItem => item.MyDateTime.ToLongDateString())
...これは例外を投げます。なぜなら、式はプロパティまたはフィールドを指していなければならないからです。そして、これは...
@{var val = item.MyDateTime.ToLongDateString();
Html.DisplayFor(modelItem => val);
}
...これは例外を投げませんが、レンダリングされた出力は空です(ただし
val
は期待された値を含んでいますが、デバッガで見ることができました)。
事前にヒントをありがとうございます
編集
ToLongDateString
はあくまで一例です。私が実際に使いたいのは
ToLongDateString
のカスタム拡張メソッドです。
DateTime
と
DateTime?
:
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")
関連
-
[解決済み] Microsoft JSONの日付はどのようにフォーマットするのですか?
-
[解決済み] ファイルアップロード ASP.NET MVC 3.0
-
[解決済み] ASP.NET MVC Frameworkで複数のサブミットボタンを処理する方法は?
-
[解決済み] ASP.NET MVCでenumからドロップダウンリストを作成するにはどうすればよいですか?
-
[解決済み] ASP.NET MVC - カスタムIIdentityまたはIPrincipalの設定
-
[解決済み] ASP.NET MVCでビューをコンパイルする
-
[解決済み] ASP.Net MVCのmodelStateからすべてのエラーを取得する方法は?
-
[解決済み] ASP.NET MVCのビューを文字列としてレンダリングする方法は?
-
[解決済み] ASP.NET MVCコントローラは、Imageを返すことができますか?
-
[解決済み】部分ビューから特定のセクションにコンテンツを注入する ASP.NET MVC 3 with Razor View Engine
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
NETガベージコレクション GC診断ツール dotnet-gcmon 使用方法
-
ASP.NET Core Dependency Injectionフレームワークの活用
-
ASP.NET CoreでCAPの取引詳細を自動で有効にする
-
.NET 6における暗黙の名前空間参照
-
ASP.NETでのRadioButton(ラジオボタン)の使用について
-
[解決済み] Server.UrlEncode vs. HttpUtility.UrlEncode
-
[解決済み] HTTPハンドラ vs HTTPモジュール
-
[解決済み] フレームワークのランタイムターゲットが見つからない .NETCoreApp=v1 互換ランタイムの1つと互換性がある
-
[解決済み] WatiNかSeleniumか?[クローズド]
-
[解決済み] ASP.NET。HTTP エラー 500.19 - 内部サーバー エラー 0x8007000d