簡體   English   中英

格式化時間跨度-MVC C#Razor DisplayFor

[英]Formatting TimeSpan - MVC C# Razor DisplayFor

我有DisplayFor以以下格式顯示TimeSpan值(持續時間):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消息=輸入字符串的格式不正確。 來源= mscorlib

我已經成功地為EditViews創建了DateTime模板,但是我似乎無法在具有TimeSpan類型的DisplayFor上解決此問題。

我不知道我在做什么,所以任何線索都值得贊賞! :) 提前致謝!

這不是解決此問題的直接答案,但我認為使用Humanizer庫會更好。

您將可以執行以下操作:

SolvedDate.Humanize();

看到這里: https : //github.com/Humanizr/Humanizer#humanize-timespan

您的時間跨度可以為空,因此請嘗試:

<td>
    @Html.Label("MyTimeSpan", Model.Ticket.Duration != null ? Model.Ticket.Duration.Value : string.Empty)
</td>

閱讀完后如何在.NET中使用自定義格式對TimeSpan對象進行String.Format格式化?

我設法解決了自己的問題,方法是對我的TimeSpanTemplate進行了注釋,然后只需在模型中通過以下方式編輯此行: [DisplayFormat(DataFormatString = "{0:HH:mm}", ApplyFormatInEditMode = true)]

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM