0

TimeSpan 値 (期間) を次の形式で表示する DisplayFor があります: 35.04:08:43.2470000 (dd.HH:mm:ss.fffffff)。

私の目標は、人間が読める文字列「HH:mm」であるため、MVC Razor で TimeSpan を表示する方法に従い、~views/Shared/TimeSpanTemplate.cshtml で DisplayTemplate を作成してみました。

@model TimeSpan
@{
    TimeSpan initialValue = Model;
}
@string.Format("{0}:{1}", (initialValue.Days * 24) + initialValue.Hours, initialValue.Minutes)

@Scripts.Render("~/bundles/bootstrap")

これは私のモデルです:

[DisplayFormat(DataFormatString = "{0:HH:mm}", ApplyFormatInEditMode = true)]
[DisplayName("Varighed")]
public virtual TimeSpan? Duration
{
   get {
      return SolvedDate.HasValue ? (TimeSpan?)SolvedDate.Value.Subtract(ReportedDate) : null;        }
}

これは私の見解です:

<td>
    @Html.DisplayFor(modelItem => item.Ticket.Duration)
</td>

次のコンパイル formatexception エラーが発生します。

入力文字列は、正しい形式ではありませんでした。--> "@Html.DisplayFor(modelItem => item.Ticket.Duration)"

System.FormatException はユーザー コードによって処理され
ませんでした。HResult=-2146233033 Message=入力文字列が正しい形式ではありませんでした。ソース= mscorlib

EditViews の DateTime テンプレートを正常に作成しましたが、TimeSpan タイプの DisplayFor でこの問題を回避できないようです。

私は自分が何をしているのか全くわからないので、手がかりをいただければ幸いです! :) 前もって感謝します!

4

3 に答える 3

1

How can I String.Format a TimeSpan object with a custom format in .NET? を読んだ後

TimeSpanTemplate をコメントアウトすることで、これを自分で解決し、モデルのこの行を次のように編集するだけです。[DisplayFormat(DataFormatString = "{0:HH:mm}", ApplyFormatInEditMode = true)]

[DisplayFormat(DataFormatString = "{0:%d}d {0:%h}h {0:%m}m {0:%s}s", ApplyFormatInEditMode = true)]

于 2016-03-18T09:47:43.527 に答える
0

あなたのタイムスパンはnull可能ですので、試してみてください:

<td>
    @Html.Label("MyTimeSpan", Model.Ticket.Duration != null ? Model.Ticket.Duration.Value : string.Empty)
</td>
于 2016-03-17T15:10:11.577 に答える