1. ホーム
  2. c#

[解決済み] 日付のみ表示し、時刻を表示しない

2023-01-05 05:25:40

質問

MVC razorで、以下のようにデータベースに現在の日付を入力しています。

model.Returndate = DateTime.Now.Date.ToShortDateString();

データベースフィールドがdatetimeデータ型で、現在の日付を文字列形式に変換しているため、これがうまくいきません...どうすればよいでしょうか?私はmm/dd/yyyy hh:mm:ss 時間形式ではなく、mm/dd/yyyy形式の日付が欲しいので文字列形式にしています...。

EDITです。

コントローラの中に

var model = new ViewModel();
model.ReturnDate = DateTime.Now;            
return PartialView("PartialView", model);  

partialviewの中に

@Html.EditorFor(model => model.Returndate)

これは、日付と時間を一緒に表示しているところです... 日付だけを表示させたい。時間ではなく、日付だけを表示させたいのです。この編集でうまく説明できるといいのですが。

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

SQLのカラムの型がDateTimeの場合、時刻を渡すか渡さないかで格納されます。

ちゃんと日付を保存したほうがいいんじゃね?

model.ReturnDate = DateTime.Now;

というように記述して、表示するときに整形します。

@Html.Label(Model.ReturnDate.ToShortDateString())

あるいはEditorForを使っている場合。

@Html.EditorFor(model => model.ReturnDate.ToShortDateString())

または

@Html.EditorFor(model => model.ReturnDate.ToString("MM/dd/yyyy"))

モデルにプロパティを追加するには、次のコードを追加します。

public string ReturnDateForDisplay
{
    get
    {
       return this.ReturnDate.ToString("d");
    }
}

そして、PartialViewの中で

@Html.EditorFor(model => model.ReturnDateForDisplay)

EDITです。

この答えのためにはっきりさせておきたいのですが、私が「EditorForを使っている場合」と言ったのは、表現しようとしている値のタイプに応じたEditorForテンプレートが必要だということです。

エディタテンプレートは、MVCで繰り返されるコントロールを管理するためのクールな方法です。

http://coding-in.net/asp-net-mvc-3-how-to-use-editortemplates/

上で説明したように、Stringのような単純な型にも使えます。しかし、より複雑なデータ型の入力フィールドのセットをテンプレート化するには、特に優れています。