Tetapkan format DateTime dengan anotasi data?


99

Saya memiliki atribut ini dalam model tampilan saya:

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

Jika saya ingin menampilkan tanggal, atau mengisi kotak teks dengan tanggal, saya punya ini:

<%: Model.StartDate %>

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

Kapanpun tanggal ditampilkan, itu ditampilkan seperti: 01/01/2011 12:00:00 AM

Tapi saya hanya ingin menampilkan 01/01/2011

Apakah ada cara untuk menerapkan format tampilan dengan anotasi data? Saya tidak ingin pergi ke setiap contoh di mana saya menampilkan tanggal, dan menambahkan beberapa kode untuk memformatnya.


Jawaban:


151

Coba beri tag dengan:

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

Baru saja mencobanya, itu masih menampilkan waktu di TextBox dan ketika baru saja ditampilkan di halaman.
Steven

3
@ Steven: Dapatkah Anda mencoba menghapus [DataType(DataType.DateTime)]jika Anda belum melakukannya?
David Fox

8
DisplayFormathanya bekerja dengan EditorFordan DisplayForpembantu.
Ε Г И І И О

1
Jawaban bagus - Saya melewatkan parm "ApplyFormatInEditMode".
CodeHxr

5
Saya bisa menyelesaikan ini dengan parameter format di Html.TextBoxFor. Dengan mengaturnya ke @Html.TextBoxFor(model => model.YOUR_DATE, "{0:MM/dd/yyyy}")saya bisa mendapatkan hanya tanggal untuk ditampilkan. Temukan ini di sini [ stackoverflow.com/a/14529347/2938775] .
Caffeinius

44

Apakah kamu sudah mencobanya?

[DataType(DataType.Date)]

2
Ini juga akan mengaktifkan dukungan pemilih tanggal HTML5, jika browser mendukungnya.
AaronLS

24

Di mvc 4 Anda dapat dengan mudah melakukannya seperti berikut menggunakan TextBoxFor..

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

Jadi, Anda tidak perlu menggunakan anotasi data apa pun dalam model atau kelas model tampilan


yup, DataAnnotations tersebut berfungsi dengan baik untuk EditorFor helper, tetapi, saat merender grid kustom dengan IEnumerable (Of Entity) Anda harus menggunakan .TextBoxFor dan ini adalah masalah saya. Terima kasih
bkwdesign

22

Jika bidang data Anda sudah merupakan tipe data DateTime, Anda tidak perlu menggunakan [DataType(DataType.Date)]anotasi; gunakan saja:

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

di jQuery, gunakan datepicker untuk kalender Anda

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

di HTML Anda, gunakan EditorForhelper:

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

"Jika bidang data Anda sudah menjadi tipe data DateTime, Anda tidak perlu menggunakan [DataType(DataType.Date)]" => itu membantu
Hassan Tareq

Tetapi untuk api web, format tampilan tidak memaksa DataFormatString = "{0:MM/dd/yyyy}"(tidak mendapatkan 400 bahkan badan permintaan memiliki format lain yaitu {"dob":"31/12/1990"})
Hassan Tareq

18

Terapkan DataAnnotation seperti:

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

10

Gunakan ini, tapi ini solusi lengkap:

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



1

Itu berhasil untuk saya

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

0

mengatur properti Anda menggunakan kode di bawah ini pada saat pembuatan model saya pikir masalah Anda akan terpecahkan .. dan waktu tidak muncul di database. Anda tidak perlu menambahkan penjelasan apapun.

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

            }
            set { dob = value; }
        }
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.