2013-06-04 2 views
9

MVC에서 일부 DateTimes의 형식을 지정하려고하지만 DisplayFormat이 Nullable 개체에 적용되지 않아 그 이유를 파악할 수 없습니다. 그것은 CreatedDateTime에 완벽하게 잘 작동하지만 (나는 내가 한 희망) 당신의 의도가 올바른 이해하면되지 LastModifiedDateTime 아래 DisplayFormat이 Nullable과 호환되지 않습니다. <DateTime>

[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> 
    } 
+0

'Nullable '대신 'DateTime?'을 사용하면 실패합니까? – TyCobb

+0

DateTime으로 변경 하시겠습니까? 아무 효과가 없다. – Preston

+1

@TyCobb 'DateTime?'과 'Nullable '은 동일합니다. –

답변

6

입니다, 당신은에 의해 Null 허용을위한 디스플레이 템플릿을 가질 수 있습니다 Views/Shared/DisplayTemplates/DateTime.cshtml에 템플릿을 배치하고 다음처럼 정의 :

@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

다음과 같이 호출 할 수 있습니다.

탈출해야합니다 : TimeSpan 또는 Nullable<TimeSpan>, 콜론 문자로 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}") 

":":

@Html.DisplayFor(model => model.LastModifiedDateTime, "Name1") 
@Html.DisplayFor(model => model.LastModifiedDateTime, "Name2") 
+0

문제가 해결되었지만 DateTimes를 다른 위치에서 다르게 표시하려면 어떻게해야합니까? – Preston

+1

@Preston이 제 편집을 확인합니다. –

+0

이것은 지금 가장 좋은 "해결 방법"입니다. 감사합니다. 그러나 실제로 전체 애플리케이션에서이를 수행하고 기존 데이터 주석 속성을 지원하려면 일종의 확장이 필요합니다. 그러나 MVC 5를 먼저 점검하여 Microsoft가 이미이를 핵심으로 구현했는지 확인합니다. nullable 타입을 많이 사용합니다. 내 경험에서 핵심 요구 사항입니다. –

1

내가 가장 간단한 방법이 널 DateTimeValueFor 방법을 사용하는 것입니다 포맷 할 생각

@Html.ValueFor(m => m.MyTimeSpan, "{0:hh':'mm}") 
관련 문제