กำหนดรูปแบบของ DateTime ด้วยคำอธิบายประกอบข้อมูลหรือไม่


100

ฉันมีแอตทริบิวต์นี้ในโมเดลมุมมองของฉัน:

[DataType(DataType.DateTime)]
public DateTime? StartDate { get; set; }

หากฉันต้องการแสดงวันที่หรือใส่วันที่ในกล่องข้อความฉันมีสิ่งเหล่านี้:

<%: Model.StartDate %>

<%: Html.TextBoxFor(m => m.StartDate) %>

เมื่อใดก็ตามที่แสดงวันที่จะแสดงเป็นวันที่01/01/2011 12:00:00 AM

แต่ฉันต้องการแสดงเฉพาะ01/01/2011เท่านั้น

มีวิธีใช้รูปแบบการแสดงผลกับคำอธิบายประกอบข้อมูลหรือไม่? ฉันไม่ต้องการไปที่ทุกอินสแตนซ์ที่ฉันแสดงวันที่และเพิ่มโค้ดเพื่อจัดรูปแบบ


คำตอบ:


154

ลองติดแท็กด้วย:

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]

เพิ่งลองใช้มันยังคงแสดงเวลาในกล่องข้อความและเวลาที่เพิ่งแสดงบนหน้า
Steven

3
@ สตีเวน: คุณลองลบออกได้[DataType(DataType.DateTime)]ไหมถ้ายังไม่ได้ทำ
David Fox

8
DisplayFormatใช้ได้เฉพาะกับEditorForและDisplayForผู้ช่วยเหลือเท่านั้น
ΕГИІИО

1
คำตอบที่ดี - ฉันไม่มี parm "ApplyFormatInEditMode"
CodeHxr

5
ฉันสามารถแก้ไขสิ่งนี้ได้โดยพารามิเตอร์รูปแบบใน Html.TextBoxFor โดยการตั้งค่าเป็น@Html.TextBoxFor(model => model.YOUR_DATE, "{0:MM/dd/yyyy}")ฉันสามารถรับเพียงวันที่ที่จะแสดง พบได้ที่นี่ [ stackoverflow.com/a/14529347/2938775]
Caffeinius

45

ลองทำดูไหม

[DataType(DataType.Date)]

2
นอกจากนี้ยังจะเปิดใช้งานการสนับสนุนตัวเลือกวันที่ HTML5 หากเบราว์เซอร์รองรับ
AaronLS

24

ใน mvc 4 คุณสามารถทำได้อย่างง่ายดายเช่นใช้TextBoxFor..

@Html.TextBoxFor(m => m.StartDate, "{0:MM/dd/yyyy}", new { @class = "form-control default-date-picker" })

ดังนั้นคุณไม่จำเป็นต้องใช้คำอธิบายประกอบข้อมูลใด ๆ ในโมเดลหรือคลาสดูโมเดล


ใช่ DataAnnotations เหล่านั้นใช้งานได้ดีสำหรับ EditorFor helpers แต่เมื่อแสดงกริดที่กำหนดเองด้วย IEnumerable (Of Entity) คุณต้องใช้. TextBoxFor และนี่คือปัญหาของฉัน ขอบคุณ
bkwdesign

22

หากฟิลด์ข้อมูลของคุณเป็นประเภทข้อมูล DateTime อยู่แล้วคุณไม่จำเป็นต้องใช้[DataType(DataType.Date)]สำหรับคำอธิบายประกอบ เพียงใช้:

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]

บน jQuery ใช้ datepicker สำหรับปฏิทินของคุณ

    $(document).ready(function () {
        $('#StartDate').datepicker();
    });

บน HTML ของคุณให้ใช้ตัวEditorForช่วย:

    @Html.EditorFor(model => model.StartDate)

"หากฟิลด์ข้อมูลของคุณเป็นประเภทข้อมูล DateTime อยู่แล้วคุณไม่จำเป็นต้องใช้[DataType(DataType.Date)]" => ที่มีประโยชน์
Hassan Tareq

แต่สำหรับ web api รูปแบบการแสดงผลไม่ได้บังคับใช้DataFormatString = "{0:MM/dd/yyyy}"(ไม่ได้รับ 400 คำขอแม้แต่รูปแบบอื่นเช่น{"dob":"31/12/1990"})
Hassan Tareq


10

ใช้สิ่งนี้ แต่เป็นโซลูชันที่สมบูรณ์:

[DataType(DataType.Date)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]


4

หลังจากแสดงความคิดเห็น

          // [DataType(DataType.DateTime)] 

ใช้แอตทริบิวต์คำอธิบายประกอบข้อมูล:

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]

ขั้นตอนที่ 7 ของลิงค์ต่อไปนี้อาจช่วยคุณได้ ...

http://ilyasmamunbd.blogspot.com/2014/12/jquery-datepicker-in-aspnet-mvc-5.html



0

ตั้งค่าคุณสมบัติของคุณโดยใช้รหัสด้านล่างในขณะที่สร้างแบบจำลองฉันคิดว่าปัญหาของคุณจะได้รับการแก้ไข. และเวลาไม่ปรากฏในฐานข้อมูลคุณไม่จำเป็นต้องเพิ่มคำอธิบายประกอบใด ๆ

private DateTime? dob;
        public DateTime? DOB
        {
            get
            {
                if (dob != null)
                {
                    return dob.Value.Date;
                }
                else
                {
                    return null;
                }

            }
            set { dob = value; }
        }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.