MVC モデルの TimeSpan フィールドの書式設定 質問する

MVC モデルの TimeSpan フィールドの書式設定 質問する

いくつかのタイムピッカーを含む MVC ページがあります。これらは、モデル内のオブジェクトのリストに null 可能 として保存されますTimeSpan。問題は、入力フィールドにタイムスパンが秒数で印刷されることです。タイムスパンが他の方法 ( ではなく など7:00)で印刷されるように、これらのモデル プロパティをフォーマットする方法はありますか07:00:00? 言うまでもなく、私の「提案」である は[DisplayFormat...]機能しませんでした。少なくとも、私が期待したようには機能しませんでした。

入力フィールドは次のように定義されます。

@Html.TextBoxFor(x => x.Shifts[i].Start)

モデルの関連部分は次のようになります。

public class Workshift
{
    [DisplayFormat(Something here perhaps?)]
    public TimeSpan? Start { get; set; }
    public TimeSpan? End { get; set; }
    public TimeSpan? Pause { get; set; }
}

public class TimeRegistrationViewModel
{
    public List<Workshift> Shifts { get; set; }

    ...
}

いつも感謝してます!

ベストアンサー1

[DisplayFormat(DataFormatString="{0:hh\\:mm}", ApplyFormatInEditMode = true)]
public TimeSpan? Start { get; set; }

[DisplayFormat(DataFormatString="{0:hh\\:mm}", ApplyFormatInEditMode = true)]
public TimeSpan? End { get; set; }

[DisplayFormat(DataFormatString="{0:hh\\:mm}", ApplyFormatInEditMode = true)]
public TimeSpan? Pause { get; set; }

TimeSpanただし、 の主な目的は、時刻ではなく、測定された時間の長さを表すことであることに注意してください。つまりTimeSpan、値は 24 時間より長くなる可能性があります。また、タイムラインを逆方向に進んでいることを表すために、負の値になることもあります。

その許容できるは、それらを時刻として使用し、実際にはフレームワーク自体によって実行されます (例: DateTime.TimeOfDay)。ただし、このように使用する場合は、ユーザー入力を慎重に検証する必要があります。データ型だけに頼ると、ユーザーは有効な時間範囲の値を入力できる可能性がありますが、有効な日付時刻は入力できない可能性があります。たとえば、 は、1 日 22 時間 33 分 44 秒を表す-1.22:33:44有効な値です。TimeSpan過去に

.Net にネイティブ型があればずっと簡単になりますがTime そうではありません アップデート:パッケージにネイティブTimeOfDayタイプが追加されました。System.TimeコアFXラボ

また、このTextBoxForメソッドはデータ注釈を取得しません。次のように、フォーマット文字列をパラメータとして直接指定することもできます。

@Html.TextBoxFor(x => x.Shifts[i].Start, "{0:hh\\:mm}")

または、次のように切り替えることもできますEditorFor

@Html.EditorFor(x => x.Shifts[i].Start)

おすすめ記事