Jika saya memiliki di kelas model saya properti tipe DateTime
bagaimana saya bisa membuatnya dalam format tertentu - misalnya dalam format yang ToLongDateString()
mengembalikan?
Saya sudah mencoba ini ...
@Html.DisplayFor(modelItem => item.MyDateTime.ToLongDateString())
... yang memunculkan pengecualian karena ekspresi harus mengarah ke properti atau bidang. Dan ini...
@{var val = item.MyDateTime.ToLongDateString();
Html.DisplayFor(modelItem => val);
}
... yang tidak memunculkan pengecualian, tetapi keluaran yang diberikan kosong (meskipun val
berisi nilai yang diharapkan, seperti yang saya lihat di debugger).
Terima kasih atas tip sebelumnya!
Sunting
ToLongDateString
hanyalah sebuah contoh. Apa yang sebenarnya ingin saya gunakan sebagai ganti ToLongDateString
metode ekstensi ubahsuaian DateTime
dan 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 "";
}
Jadi, saya rasa saya tidak dapat menggunakan DisplayFormat
atribut dan DataFormatString
parameter pada properti ViewModel.
sumber
Anda dapat menghias properti model tampilan Anda dengan
[DisplayFormat]
atribut:dan menurut pandangan Anda:
atau, untuk menampilkan nilai,
Kemungkinan lain, yang tidak saya rekomendasikan, adalah menggunakan helper yang diketik lemah:
sumber
DateTime
(ToLongDateString hanyalah sebuah contoh), jadi sepertinya saya tidak dapat menggunakannyaDataFormatString
.@Html.DisplayFor(x => x.MyDateTime)
. @NickLarsen itulah alasan mengapa model tampilan harus digunakan. Dalam contoh saya, saya menghias model tampilan dengan atribut ini dan tampilan sudah terikat dengan tampilan tertentu, itulah tujuannya.Keluaran berformat sederhana di dalam model
atau di loop depan
sumber
string.Format
Saya menggunakan pendekatan berikut untuk format inline dan menampilkan properti tanggal dari model.
Jika tidak, saat mengisi TextBox atau Editor, Anda dapat melakukan seperti yang disarankan @Darin, menghias atribut dengan
[DisplayFormat]
atribut.sumber
Jika semua
DateTime
jenis Anda dirender dengan cara yang sama, Anda dapat menggunakanDateTime
template tampilan kustom .Dalam folder Views Anda, buat folder bernama "DisplayTemplates" baik di bawah folder views spesifik pengontrol Anda, atau di bawah folder "Shared" (ini berfungsi mirip dengan parsial).
Dalam membuat sebuah file bernama
DateTime.cshtml
yang mengambilDateTime
sebagai@model
dan kode bagaimana Anda ingin membuat kencan Anda:Sekarang Anda bisa menggunakan ini dalam pandangan Anda dan itu akan berfungsi:
Selama Anda mengikuti konvensi untuk menambahkannya ke folder "DisplayTemplates" dan menamai file agar sesuai dengan jenis yang Anda tampilkan, MVC akan secara otomatis menggunakannya untuk menampilkan nilai Anda. Ini juga berfungsi untuk mengedit skenario menggunakan "EditorTemplates".
Berikut beberapa informasi lebih lanjut tentang template .
sumber
DateTime
. Namun saya memiliki beberapa properti DateTime nullable. Saya mencoba membuat file kedua diDisplayTemplates
folder, disebutNullableDateTime.cshtml
dan di dalam:@using MyHelpers @model System.DateTime? @Model.MyCustomExtension()
BerikutMyCustomExtension
adalah metode ekstensi diDateTime?
. Namun itu mendapatkan pengecualian ketika DateTime? field benar-benar null yang memberi tahu saya bahwa kamus membutuhkan elemen model tipeDateTime
yang bukan null. Apakah ada cara untuk mendefinisikan DisplayTemplate untuk DateTime nullable?NullableDateTime.cshtml
menggunakan dan menggunakan pendekatan yang disarankan dan digunakan @NickLarsen@Html.DisplayFor(m => m.MyDateTime, "NullableDateTime")
.Preferensi saya adalah mempertahankan detail pemformatan dengan tampilan dan bukan model tampilan. Jadi di MVC4 / Razor:
referensi format waktu: http://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.71).aspx
Kemudian saya memiliki datepicker JQuery yang terikat padanya, dan itu menempatkan tanggal dalam format yang berbeda ... doh!
Sepertinya saya perlu mengatur format datepicker ke format yang sama.
Jadi saya menyimpan
System.Globalization
pemformatan dalam atribut data- * dan mengumpulkannya saat menyiapkanDan inilah bagian yang sial: format .net dan datepicker tidak cocok, jadi peretasan diperlukan:
itu agak lemah, tetapi harus mencakup banyak kasus.
sumber
bekerja untuk saya
sumber
Mengalami masalah yang sama baru-baru ini.
Saya menemukan bahwa hanya dengan mendefinisikan DataType sebagai Date dalam model juga berfungsi (menggunakan pendekatan Code First)
sumber
kamu bisa melakukan seperti ini
@item.Date.Value.Tostring("dd-MMM-yy");
sumber
jika saya hanya ingin menampilkan tanggal dalam format singkat saya hanya menggunakan @ Model.date.ToShortDateString () dan mencetak tanggal dalam
sumber
Jika yang ingin Anda lakukan hanyalah menampilkan tanggal dengan format tertentu, panggil saja:
Ini akan menghasilkan format berikut,
sumber
ini akan ditampilkan dalam
dd/MM/yyyy
format di View AndaDalam penglihatan:
alih-alih
DisplayFor
menggunakan kode iniitu juga memeriksa apakah nilainya null di kolom tanggal, jika benar maka itu akan menampilkan Tanggal Kosong atau tanggal diformat aktual dari kolom.
Harapan membantu seseorang.
sumber
sumber
Di MVC5 saya akan menggunakan, jika model Anda adalah datetime
Atau jika model Anda berisi properti datetime
Berikut arti resmi dari Format:
https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx
sumber
Hanya Lihat File Sesuaikan seperti ini. Anda dapat mencoba ini.
item.transdate
itu adalahDateTime
tipe data Anda.sumber