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.

Steven
sumber

Jawaban:

151

Coba beri tag dengan:

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
David Fox
sumber
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)]
rk1962
sumber
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

Hasib Hasan Arnab
sumber
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)
Toddt
sumber
"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}")]
Chirag
sumber
10

Gunakan ini, tapi ini solusi lengkap:

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

Gunakan EditorFor daripada TextBoxFor

collusionbdbh.dll
sumber
1

Itu berhasil untuk saya

[DataType(DataType.DateTime)]
[DisplayFormat(DataFormatString = "{0:dd-MM-yyyy}", ApplyFormatInEditMode = true)]
FelixAVeras
sumber
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; }
        }

sumber