11

MVC でいくつかの DateTimes をフォーマットしようとしていますが、DisplayFormat が Nullable オブジェクトに適用されておらず、その理由がわかりません。CreatedDateTime では完全に機能しましたが、LastModifiedDateTime では機能しませんでした

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yy hh:mm tt}")]
public DateTime CreatedDateTime { get; set; }
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yy hh:mm tt}")]
public Nullable<DateTime> LastModifiedDateTime { get; set; }

以下はビューです

   <div class="editor-field">
        @Html.DisplayFor(model => model.CreatedDateTime)
        <br />
        @Html.Raw(TimeAgo.getStringTime(Model.CreatedDateTime))
    </div>
    @if (Model.LastModifiedDateTime.HasValue)
    { 
        <div class="editor-label">
            @Html.LabelFor(model => model.LastModifiedDateTime)
        </div>
        <div class="editor-field">
            @Html.DisplayFor(model => model.LastModifiedDateTime)
        <br />
            @Html.Raw(TimeAgo.getStringTime(Model.LastModifiedDateTime.Value)) By: @Html.DisplayFor(model => model.LastModifiedBy)
        </div>
    }
4

2 に答える 2

9

あなたの意図が正しいことを理解していれば (私はそう願っています)、テンプレートを配置しViews/Shared/DisplayTemplates/DateTime.cshtmlて次のように定義することで、Nullable の表示テンプレートを作成できます。

@model System.DateTime?
@Html.Label("", Model.HasValue ? Model.Value.ToString("MM/dd/yy hh:mm tt") : string.Empty)

これが役立つことを願っています。

編集

同じタイプの複数の表示テンプレートを使用して、名前で使用するテンプレートを指定できます。たとえば、次のようにします。

  • Views/Shared/DisplayTemplates/Name1.cshtml
  • Views/Shared/DisplayTemplates/Name2.cshtml

その後、次のように呼び出すことができます。

@Html.DisplayFor(model => model.LastModifiedDateTime, "Name1")
@Html.DisplayFor(model => model.LastModifiedDateTime, "Name2")
于 2013-06-04T03:26:44.693 に答える
1

DateTimenullableをフォーマットする最も簡単な方法は、メソッドを使用することだと思いますValueFor

@Html.ValueFor(m => m.CreatedDateTime , "{0:MM/dd/yy hh:mm tt}")
@Html.ValueFor(m => m.LastModifiedDateTime , "{0:MM/dd/yy hh:mm tt}")

またはでValueForメソッドを使用する場合、コロン文字「:」をエスケープする必要があります。TimeSpanNullable<TimeSpan>

@Html.ValueFor(m => m.MyTimeSpan, "{0:hh':'mm}")
于 2017-01-18T10:09:01.800 に答える