Saya memiliki kode pisau cukur berikut yang saya ingin mm/dd/yyyy
format tanggalnya:
Audit Date: @Html.DisplayFor(Model => Model.AuditDate)
Saya telah mencoba sejumlah pendekatan berbeda tetapi tidak ada pendekatan yang berhasil dalam situasi saya
AuditDate saya adalah sebuah DateTime?
tipe
Saya telah mencoba sesuatu seperti ini dan mendapatkan kesalahan ini:
@Html.DisplayFor(Model => Model.AuditDate.Value.ToShortDateString())
Informasi tambahan: Template hanya dapat digunakan dengan akses kolom, akses properti, indeks array dimensi tunggal, atau ekspresi pengindeks kustom parameter tunggal.
Mencoba ini:
@Html.DisplayFor(Model => Model.AuditDate.ToString("mm/dd/yyyy"))
Tidak ada kelebihan beban untuk metode 'ToString' yang membutuhkan 1 argumen
sumber
No overload for method 'ToString' takes 1 arguments
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
ApplyFormatInEditMode = true
ke properti:[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
. Seharusnya sudah jelas, tetapi ketika Anda semua tidak membuang waktu untuk menyalin-tempel, petunjuk dari Intellisense mungkin melewati hidung Anda seperti halnya saya :)Jika Anda hanya mengeluarkan nilai properti model itu, Anda tidak memerlukan
DisplayFor
helper html, cukup panggil langsung dengan pemformatan string yang tepat .Audit Date: @Model.AuditDate.Value.ToString("d")
Haruskah keluaran
Audit Date: 1/21/2015
Terakhir, tanggal audit Anda bisa jadi nol, jadi Anda harus melakukan pemeriksaan bersyarat sebelum Anda mencoba memformat nilai nullable.
@if (item.AuditDate!= null) { @Model.AuditDate.Value.ToString("d")}
Googling kesalahan yang Anda dapatkan memberikan jawaban ini , yang menunjukkan bahwa kesalahan tersebut berasal dari menggunakan kata Model di pembantu Html Anda. Misalnya, menggunakan
@Html.DisplayFor(Model=>Model.someProperty)
. Ubah ini untuk menggunakan sesuatu selainModel
, misalnya:@Html.DisplayFor(x=>x.someProperty)
atau ubah modalM
menjadi huruf kecilm
di pembantu ini.sumber
@Model.AuditDate.Value.ToString("d")
Additional information: Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions.
Html.DisplayFor
helper. Jangan lakukan itu. Juga, apakah Anda yakin bahwa ini melempar kesalahan pada baris itu dan bukan beberapa properti lain tempat Anda mencoba menggunakanDisplayFor
helper?@Model...
saya mendapatkan kesalahan ini: 'Model' bertentangan dengan deklarasi System.Web.Mvc.WebViewPage <TModel> .Model 'Saya telah menggunakan perubahan ini dalam kode saya:
kode lama:
<td> @Html.DisplayFor(modelItem => item.dataakt) </td>
baru:
<td> @Convert.ToDateTime(item.dataakt).ToString("dd/MM/yyyy") </td>
sumber
Jawaban @ ChrisPratt tentang penggunaan Template Tampilan salah. Kode yang benar untuk membuatnya berfungsi adalah:
@model DateTime? @if (Model.HasValue) { @Convert.ToDateTime(Model).ToString("MM/dd/yyyy") }
Itu karena
.ToString()
forNullable<DateTime>
tidak menerimaFormat
parameter .sumber
Saya menerapkan hal serupa dengan cara ini:
2. Beri garis nol dan batas nol pada TextBox di css.
.my-style { outline: none; border: none; }
Dan ...... Selesai :)
sumber
Anda dapat menggunakan atribut [ DisplayFormat ] pada model tampilan Anda karena Anda ingin menerapkan format ini untuk keseluruhan proyek.
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")] public Nullable<System.DateTime> Date { get; set; }
sumber
Bagi saya itu sudah cukup untuk digunakan
[DataType(DataType.Date)] [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")] public DateTime StartDate { set; get; }
sumber
Setelah beberapa menggali dan akhirnya aku menetapkan
Thread
's CurrentCulture nilai untuk memiliki CultureInfo ( 'en-US') dalam metode aksi kontroler:Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
Berikut adalah beberapa opsi lain jika Anda ingin memiliki pengaturan ini di setiap tampilan.
Tentang
CurrentCulture
nilai properti:Sumber: MSDN CurrentCulture
Catatan:
CurrentCulture
Pengaturan properti sebelumnya mungkin opsional jika pengontrol sudah berjalan denganCultureInfo("en-US")
atau serupa di mana format tanggalnya"MM/dd/yyyy"
.Setelah mengatur
CurrentCulture
properti, tambahkan blok kode untuk mengubah tanggal ke"M/d/yyyy"
format dalam tampilan:@{ //code block var shortDateLocalFormat = ""; if (Model.AuditDate.HasValue) { shortDateLocalFormat = ((DateTime)Model.AuditDate).ToString("M/d/yyyy"); //alternative way below //shortDateLocalFormat = ((DateTime)Model.AuditDate).ToString("d"); } } @shortDateLocalFormat
Di atas
@shortDateLocalFormat
variabel diformat denganToString("M/d/yyyy")
karya. JikaToString("MM/dd/yyyy")
digunakan, seperti yang saya lakukan pertama kali maka Anda akhirnya memiliki masalah nol . Juga seperti yang direkomendasikan oleh TommyToString("d")
bekerja juga. Sebenarnya"d"
adalah singkatan dari "Pola tanggal pendek" dan dapat digunakan dengan format budaya / bahasa yang berbeda juga.Saya kira blok kode dari atas juga dapat diganti dengan beberapa metode pembantu keren atau serupa.
Sebagai contoh
@helper DateFormatter(object date) { var shortDateLocalFormat = ""; if (date != null) { shortDateLocalFormat = ((DateTime)date).ToString("M/d/yyyy"); } @shortDateLocalFormat }
dapat digunakan dengan panggilan pembantu ini
@DateFormatter(Model.AuditDate)
Pembaruan , saya menemukan bahwa ada cara alternatif untuk melakukan hal yang sama ketika metode DateTime.ToString (String, IFormatProvider) digunakan. Ketika metode ini digunakan maka tidak perlu menggunakan
Thread
'sCurrentCulture
properti. TheCultureInfo("en-US")
dilewatkan sebagai argumen kedua -> IFormatProvider keDateTime.ToString(String, IFormatProvider)
metode.Metode pembantu yang dimodifikasi:
@helper DateFormatter(object date) { var shortDateLocalFormat = ""; if (date != null) { shortDateLocalFormat = ((DateTime)date).ToString("d", new System.Globalization.CultureInfo("en-US")); } @shortDateLocalFormat }
.NET Fiddle
sumber
Mungkin coba saja
@(Model.AuditDate.HasValue ? Model.AuditDate.ToString("mm/dd/yyyy") : String.Empty)
Anda juga dapat menggunakan banyak jenis format string seperti .ToString ("dd MMM, yyyy") .ToString ("d") dll
sumber
@model
tidak mengenaliM
saat menggunakan di halaman HTML, huruf kecilm
saat mendeklarasikan.No overload for method 'ToString' takes 1 arguments
mengeluh ketika saya menggunakanToString("mm/dd/yyyy")
Dalam Tampilan Ganti ini:
@Html.DisplayFor(Model => Model.AuditDate.Value.ToShortDateString())
Dengan:
@if(@Model.AuditDate.Value != null){@Model.AuditDate.Value.ToString("dd/MM/yyyy")} else {@Html.DisplayFor(Model => Model.AuditDate)}
Penjelasan: Jika nilai AuditDate bukan null maka itu akan memformat tanggal menjadi hh / MM / yyyy, jika tidak biarkan seperti itu karena tidak memiliki nilai.
sumber
Saya memiliki masalah serupa pada pengontrol saya dan inilah yang berhasil untuk saya:
model.DateSigned.HasValue ? model.DateSigned.Value.ToString("MM/dd/yyyy") : ""
"DateSigned" adalah nilai dari model saya. Garis berbunyi, jika nilai model memiliki nilai, maka format nilainya, jika tidak, tidak menampilkan apa pun.
Semoga membantu
sumber
Ini adalah cara terbaik untuk mendapatkan string tanggal sederhana:
@DateTime.Parse(Html.DisplayFor(Model => Model.AuditDate).ToString()).ToShortDateString()
sumber
HtmlString
output denganDisplayFor
, mengubahnya menjadi aString
, menguraikannya sebagai aDateTime
, lalu memformatnya sebagai aString
. Tak perlu rumit, menurut saya.Anda bisa menggunakan Convert
<td>@Convert.ToString(string.Format("{0:dd/MM/yyyy}", o.frm_dt))</td>
sumber
Lihat jawaban tentang
No overload for method 'ToString' takes 1 arguments
kesalahan ini.Anda tidak dapat memformat DateTime nullable - Anda harus menggunakan properti DateTime.Value.
@Model.AuditDate.HasValue ? Model.AuditDate.Value.ToString("mm/dd/yyyy") : string.Empty
sumber
'Model' conflicts with the declaration 'System.Web.Mvc.WebViewPage<TModel>.Model'