Html.DisplayFor() akan menampilkan DisplayTemplate yang cocok dengan tipe properti.
Jika tidak dapat menemukan apapun, saya kira itu memanggil .ToString().
Jika Anda tidak tahu tentang templat tampilan, itu sebagian tampilan yang dapat dimasukkan ke dalam DisplayTemplatesfolder di dalam folder tampilan yang terkait dengan pengontrol.
Contoh:
Jika Anda membuat tampilan bernama String.cshtmldi dalam DisplayTemplatesfolder folder tampilan Anda (misalnya Home, atau Shared) dengan kode berikut:
Kemudian @Html.DisplayFor(model => model.Title)(dengan asumsi itu Titleadalah string) akan menggunakan templat dan tampilan <strong>Null string</strong>jika string tersebut nol, atau kosong.
Tampaknya tidak ada gunanya bagi saya, dalam banyak kasus, menggunakan DisplayFor untuk tipe primitif. Misalnya, DateTime akan menampilkan tanggal / waktu bahkan jika bagian waktu tidak berguna. Jika Anda bisa menentukan string format "{0: d}" untuk tipe DateTime dalam atribut properti pada Model, DisplayFor mungkin bisa lebih berguna.
Anda bisa menambahkan pemilih tanggal jQuery ke template EditorFor untuk tipe data DateTime untuk selalu menampilkan pemilih tanggal dalam bentuk misalnya.
Zachary Scott
4
Sepertinya bagi saya itu over-engineering untuk menggunakannya secara umum, tetapi Anda harus menggunakannya ketika Anda ingin memformat output untuk atribut model tertentu. Tanya jawab teman-teman, terima kasih. +1 semua bulat.
Robin Winslow
apa yang terjadi jika Anda memiliki dua model dengan nama yang sama?
halivingston
77
Saya pikir manfaat utamanya adalah ketika Anda menetapkan Templat Display Anda sendiri, atau menggunakan anotasi Data.
Jadi misalnya jika judul Anda adalah tanggal, Anda dapat menentukan
[DisplayFormat(DataFormatString="{0:d}")]
dan kemudian pada setiap halaman akan menampilkan nilai secara konsisten. Kalau tidak, Anda mungkin harus menyesuaikan tampilan pada beberapa halaman. Jadi tidak banyak membantu untuk string biasa, tetapi tidak membantu untuk mata uang, tanggal, email, url, dll.
Misalnya, alih-alih alamat email menjadi string biasa, alamat email itu dapat ditampilkan sebagai tautan:
DisplayForjuga berguna untuk templating. Anda dapat menulis templat untuk Model Anda, dan melakukan sesuatu seperti ini:
@Html.DisplayFor(m => m)
Mirip dengan @Html.EditorFor(m => m). Ini berguna untuk prinsip KERING sehingga Anda tidak perlu menulis logika tampilan yang sama berulang-ulang untuk Model yang sama.
Lihatlah blog ini di templat MVC2. Itu masih sangat berlaku untuk MVC3:
Ini juga berguna jika Model Anda memiliki anotasi Data. Misalnya, jika properti pada model dihiasi dengan EmailAddressanotasi data, DisplayForakan menjadikannya sebagai mailto:tautan.
@Html.DisplayFor(m => m)bisa juga disederhanakan menjadi adil @Html.DisplayForModel().
Brant Bobby
Apa ekspresi lamda (m => m)? Apa yang pertama saya wakili?
Arcadian
1
m pertama adalah nama parameter
Sinaesthetic
1
@ magic-c0d3r m pertama adalah objek Model halaman. Itulah yang digunakan dalam ekspresi labmda
Don Cheadle
4
Setelah mencari jawaban untuk diri sendiri selama beberapa waktu, saya dapat menemukan sesuatu. secara umum jika kita menggunakannya hanya untuk satu properti itu tampak sama bahkan jika kita melakukan "Lihat Sumber" dari HTML yang dihasilkan Di bawah ini dihasilkan HTML misalnya, ketika saya ingin menampilkan hanya properti Nama untuk kelas saya
<td>
myClassNameProperty
</td><td>
myClassNameProperty,Thisis direct fromItem</td>
Ini adalah HTML yang dihasilkan dari kode di bawah ini
<td>@Html.DisplayFor(modelItem=>item.Genre.Name)</td><td>@item.Genre.Name,Thisis direct fromItem</td>
Pada saat yang sama sekarang jika saya ingin menampilkan semua properti dalam satu pernyataan untuk "Genre" kelas saya dalam hal ini, saya dapat menggunakan @ Html.DisplayFor () untuk menghemat pengetikan saya, setidaknya
saya dapat menulis @ Html.DisplayFor (modelItem => item.Genre) untuk menulis pernyataan terpisah untuk setiap properti Genre seperti di bawah ini
Saya pikir manfaat utamanya adalah ketika Anda menetapkan Templat Display Anda sendiri, atau menggunakan anotasi Data.
Jadi misalnya jika judul Anda adalah tanggal, Anda dapat menentukan
dan kemudian pada setiap halaman akan menampilkan nilai secara konsisten. Kalau tidak, Anda mungkin harus menyesuaikan tampilan pada beberapa halaman. Jadi tidak banyak membantu untuk string biasa, tetapi tidak membantu untuk mata uang, tanggal, email, url, dll.
Misalnya, alih-alih alamat email menjadi string biasa, alamat email itu dapat ditampilkan sebagai tautan:
sumber
DisplayFor
juga berguna untuk templating. Anda dapat menulis templat untuk Model Anda, dan melakukan sesuatu seperti ini:Mirip dengan
@Html.EditorFor(m => m)
. Ini berguna untuk prinsip KERING sehingga Anda tidak perlu menulis logika tampilan yang sama berulang-ulang untuk Model yang sama.Lihatlah blog ini di templat MVC2. Itu masih sangat berlaku untuk MVC3:
http://www.dalsoft.co.uk/blog/index.php/2010/04/26/mvc-2-templates/
Ini juga berguna jika Model Anda memiliki anotasi Data. Misalnya, jika properti pada model dihiasi dengan
EmailAddress
anotasi data,DisplayFor
akan menjadikannya sebagaimailto:
tautan.sumber
@Html.DisplayFor(m => m)
bisa juga disederhanakan menjadi adil@Html.DisplayForModel()
.Setelah mencari jawaban untuk diri sendiri selama beberapa waktu, saya dapat menemukan sesuatu. secara umum jika kita menggunakannya hanya untuk satu properti itu tampak sama bahkan jika kita melakukan "Lihat Sumber" dari HTML yang dihasilkan Di bawah ini dihasilkan HTML misalnya, ketika saya ingin menampilkan hanya properti Nama untuk kelas saya
Ini adalah HTML yang dihasilkan dari kode di bawah ini
Pada saat yang sama sekarang jika saya ingin menampilkan semua properti dalam satu pernyataan untuk "Genre" kelas saya dalam hal ini, saya dapat menggunakan @ Html.DisplayFor () untuk menghemat pengetikan saya, setidaknya
saya dapat menulis @ Html.DisplayFor (modelItem => item.Genre) untuk menulis pernyataan terpisah untuk setiap properti Genre seperti di bawah ini
dan seterusnya tergantung pada jumlah properti.
sumber