Gán định dạng của DateTime với chú thích dữ liệu?


99

Tôi có thuộc tính này trong mô hình chế độ xem của mình:

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

Nếu tôi muốn hiển thị ngày tháng hoặc điền vào một hộp văn bản có ngày tháng, tôi có những điều sau:

<%: Model.StartDate %>

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

Bất cứ khi nào ngày được hiển thị, nó sẽ được hiển thị như: 01/01/2011 12:00:00 AM

Nhưng tôi chỉ muốn hiển thị 01/01/2011

Có cách nào để áp dụng định dạng hiển thị với chú thích dữ liệu không? Tôi không muốn phải đi đến mọi trường hợp mà tôi hiển thị ngày tháng và thêm một số mã để định dạng nó.


Câu trả lời:


149

Hãy thử gắn thẻ nó bằng:

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

Chỉ cần thử điều đó, nó vẫn hiển thị thời gian trong TextBox và khi nó vừa hiển thị trên trang.
Steven

3
@Steven: Bạn có thể thử gỡ bỏ [DataType(DataType.DateTime)]nếu bạn chưa?
David Fox,

8
DisplayFormatchỉ hoạt động với EditorForDisplayFornhững người trợ giúp.
Ε Г И І И О

1
Câu trả lời tuyệt vời - Tôi đã thiếu parm "ApplyFormatInEditMode".
CodeHxr

5
Tôi đã có thể giải quyết vấn đề này bằng tham số định dạng trong Html.TextBoxFor. Bằng cách đặt nó thành, @Html.TextBoxFor(model => model.YOUR_DATE, "{0:MM/dd/yyyy}")tôi đã có thể chỉ ngày để hiển thị. Tìm thấy cái này ở đây [ stackoverflow.com/a/14529347/2938775] .
Caffeinius

44

Bạn đã thử cái này chưa?

[DataType(DataType.Date)]

2
Điều này cũng sẽ bật hỗ trợ bộ chọn ngày HTML5, nếu trình duyệt hỗ trợ nó.
AaronLS 18/10/12

24

Trong mvc 4, bạn có thể dễ dàng làm điều đó như sau bằng cách sử dụng TextBoxFor..

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

Vì vậy, bạn không cần sử dụng bất kỳ chú thích dữ liệu nào trong lớp mô hình hoặc chế độ xem


yup, những DataAnnotation đó hoạt động tốt cho EditorFor, nhưng khi kết xuất lưới tùy chỉnh với IEnumerable (Of Entity), bạn phải sử dụng .TextBoxFor và đây là vấn đề của tôi. Cảm ơn
bkwdesign

22

Nếu trường dữ liệu của bạn đã là kiểu dữ liệu DateTime, bạn không cần sử dụng [DataType(DataType.Date)]cho chú thích; chỉ dùng:

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

trên jQuery, sử dụng datepicker cho lịch của bạn

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

trên HTML của bạn, hãy sử dụng trình EditorFortrợ giúp:

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

"Nếu trường dữ liệu của bạn đã là một kiểu dữ liệu DateTime, bạn không cần phải sử dụng [DataType(DataType.Date)]" => đó là hữu ích
Hassan Tareq

Nhưng đối với api web, định dạng hiển thị không được thực thi DataFormatString = "{0:MM/dd/yyyy}"(không nhận được bất kỳ thậm chí cơ thể 400 yêu cầu có định dạng khác ví dụ {"dob":"31/12/1990"})
Hassan Tareq

18

Áp dụng DataAnnotation như:

[DisplayFormat(DataFormatString = "{0:MMM dd, yyyy}")]

10

Sử dụng cái này, nhưng đó là một giải pháp hoàn chỉnh:

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



1

Nó ổn với tôi

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

0

đặt thuộc tính của bạn bằng cách sử dụng mã bên dưới tại thời điểm tạo mô hình, tôi nghĩ rằng vấn đề của bạn sẽ được giải quyết..và thời gian không xuất hiện trong cơ sở dữ liệu. bạn không cần thêm bất kỳ chú thích nào.

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

            }
            set { dob = value; }
        }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.