หากฉันมีคุณสมบัติประเภทหนึ่งในคลาสโมเดลDateTime
ฉันจะแสดงผลในรูปแบบเฉพาะได้อย่างไรตัวอย่างเช่นในรูปแบบที่ToLongDateString()
ส่งคืน
ฉันได้ลองสิ่งนี้ ...
@Html.DisplayFor(modelItem => item.MyDateTime.ToLongDateString())
... ซึ่งแสดงข้อยกเว้นเนื่องจากนิพจน์ต้องชี้ไปที่คุณสมบัติหรือฟิลด์ และนี่...
@{var val = item.MyDateTime.ToLongDateString();
Html.DisplayFor(modelItem => val);
}
... ซึ่งไม่ได้ทำให้เกิดข้อยกเว้น แต่เอาต์พุตที่แสดงผลนั้นว่างเปล่า (แม้ว่าจะval
มีค่าที่คาดหวังอย่างที่ฉันเห็นในดีบักเกอร์)
ขอบคุณสำหรับเคล็ดลับล่วงหน้า!
แก้ไข
ToLongDateString
เป็นเพียงตัวอย่างเท่านั้น สิ่งที่ฉันต้องการใช้แทนToLongDateString
คือวิธีการขยายที่กำหนดเองของDateTime
และ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 "";
}
ดังนั้นฉันคิดว่าฉันไม่สามารถใช้DisplayFormat
แอตทริบิวต์และDataFormatString
พารามิเตอร์บนคุณสมบัติ ViewModel ได้