내 모델 클래스에 유형의 속성이있는 경우 DateTime
어떻게 특정 형식으로 렌더링 할 수 ToLongDateString()
있습니까 ( 예 : 반환 되는 형식) ?
나는 이것을 시도했다 …
@Html.DisplayFor(modelItem => item.MyDateTime.ToLongDateString())
…식이 속성 또는 필드를 가리켜 야하기 때문에 예외가 발생합니다. 이…
@{var val = item.MyDateTime.ToLongDateString();
Html.DisplayFor(modelItem => val);
}
… 예외가 발생하지 않지만 렌더링 된 출력이 비어 있습니다 ( val
디버거에서 볼 수 있듯이 예상 값이 포함되어 있음).
미리 팁을 주셔서 감사합니다!
편집하다
ToLongDateString
단지 예일뿐입니다. 대신에 실제로 사용하고 싶은 ToLongDateString
것은 DateTime
and 의 사용자 지정 확장 메서드입니다 DateTime?
.
public static string FormatDateTimeHideMidNight(this DateTime dateTime)
{
if (dateTime.TimeOfDay == TimeSpan.Zero)
return dateTime.ToString("d");
else
return dateTime.ToString("g");
}
public static string FormatDateTimeHideMidNight(this DateTime? dateTime)
{
if (dateTime.HasValue)
return dateTime.Value.FormatDateTimeHideMidNight();
else
return "";
}
따라서 ViewModel 속성에 DisplayFormat
특성과 DataFormatString
매개 변수를 사용할 수 없다고 생각 합니다.
답변
특정 형식으로 날짜를 표시하기 만하면 다음을 호출하십시오.
@String.Format(myFormat, Model.MyDateTime)
@Html.DisplayFor(...)
템플릿을 지정하지 않거나 템플릿을 반복하는 것과 같이 템플릿에 빌드 된 것을 사용해야하는 경우가 아니면 사용 은 추가 작업 일뿐 IEnumerable<T>
입니다. 템플릿을 만드는 것은 매우 간단하며 많은 유연성도 제공 할 수 있습니다. 뷰 폴더에라는 현재 컨트롤러 (또는 공유 뷰 폴더)에 대한 폴더를 만듭니다 DisplayTemplates
. 해당 폴더 안에 템플릿을 만들려는 모델 유형이있는 부분보기를 추가합니다. 이 경우 /Views/Shared/DisplayTemplates
라는 부분보기를 추가 하고 추가했습니다 ShortDateTime.cshtml
.
@model System.DateTime
@Model.ToShortDateString()
이제 다음 줄을 사용하여 해당 템플릿을 호출 할 수 있습니다.
@Html.DisplayFor(m => m.MyDateTime, "ShortDateTime")
답변
속성을 사용하여 뷰 모델 속성을 장식 할 수 있습니다 [DisplayFormat]
.
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}",
ApplyFormatInEditMode = true)]
public DateTime MyDateTime { get; set; }
그리고 당신의 관점에서 :
@Html.EditorFor(x => x.MyDate)
또는 값을 표시하기 위해
@Html.DisplayFor(x => x.MyDate)
권장하지 않는 또 다른 가능성은 약한 유형의 도우미를 사용하는 것입니다.
@Html.TextBox("MyDate", Model.MyDate.ToLongDateString())
답변
모델 내부의 단순 형식 출력
@String.Format("{0:d}", model.CreatedOn)
또는 foreach 루프에서
@String.Format("{0:d}", item.CreatedOn)
답변
다음 접근 방식을 사용하여 형식을 인라인하고 모델의 날짜 속성을 표시합니다.
@Html.ValueFor(model => model.MyDateTime, "{0:dd/MM/yyyy}")
그렇지 않으면 TextBox 또는 Editor를 채울 때 @Darin이 제안한 것처럼 속성을 속성으로 장식 할 수 [DisplayFormat]
있습니다.
답변
모든 DateTime
유형이 동일한 방식으로 렌더링되는 경우 사용자 정의 DateTime
디스플레이 템플릿을 사용할 수 있습니다 .
Views 폴더에서 컨트롤러 별보기 폴더 또는 “Shared”폴더 아래에 “DisplayTemplates”라는 폴더를 만듭니다 (이 작업은 부분과 유사 함).
내부라는 이름의 파일을 만들 DateTime.cshtml
필요 DateTime
는 AS @model
당신이 당신의 날짜를 렌더링하는 방법과 코드를 :
@model System.DateTime
@Model.ToLongDateString()
이제 뷰에서 이것을 사용할 수 있으며 작동합니다.
@Html.DisplayFor(mod => mod.MyDateTime)
“DisplayTemplates”폴더에 파일을 추가하고 표시하는 유형과 일치하도록 파일 이름을 지정하는 규칙을 따르는 한 MVC는 자동으로이를 사용하여 값을 표시합니다. “EditorTemplates”를 사용하여 시나리오를 편집 할 때도 작동합니다.
답변
내가 선호하는 것은 뷰 모델이 아닌 뷰와 함께 형식화 세부 사항을 유지하는 것입니다. 따라서 MVC4 / Razor에서 :
@Html.TextBoxFor(model => model.DateTime, "{0:d}");
datetime 형식 참조 :
http://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.71).aspx
그런 다음 JQuery datepicker가 바인딩되어 있으며 날짜를 다른 형식으로 넣습니다 … doh!
datepicker의 형식을 동일한 형식으로 설정해야하는 것 같습니다.
그래서 저는 System.Globalization
data- * 속성에 서식을 저장하고 설정할 때 수집합니다.
@Html.TextBoxFor(
model => model.DateTime.Date,
"{0:d}",
new
{
@class = "datePicker",
@data_date_format=System.Globalization.CultureInfo
.CurrentUICulture.DateTimeFormat.ShortDatePattern
}));
그리고 여기에 짜증나는 부분이 있습니다. .net과 datepicker의 형식이 일치하지 않으므로 해커가 필요합니다.
$('.datePicker').each(function(){
$(this).datepicker({
dateFormat:$(this).data("dateFormat").toLowerCase().replace("yyyy","yy")
});
});
그것은 다소 약하지만 많은 경우를 다루어야합니다.
답변
나를 위해 일해
<%=Model.MyDateTime.ToString("dd-MMM-yyyy")%>