Html.DisplayFor() wyrenderuje DisplayTemplate, który pasuje do typu właściwości.
Jeśli nie może znaleźć, to chyba wywołuje .ToString().
Jeśli nie wiesz o szablonach wyświetlania, są to widoki częściowe, które można umieścić w DisplayTemplatesfolderze wewnątrz folderu widoku powiązanego z kontrolerem.
Przykład:
Jeśli utworzysz widok nazwany String.cshtmlw DisplayTemplatesfolderze folderu widoków (np. HomeLub Shared) z następującym kodem:
Następnie @Html.DisplayFor(model => model.Title)(zakładając, że Titlejest to ciąg) użyje szablonu i wyświetli, <strong>Null string</strong>czy ciąg jest pusty lub pusty.
W większości przypadków wydaje mi się bezcelowe używanie DisplayFor dla typów pierwotnych. Na przykład DateTime wyświetli datę / czas, nawet jeśli część czasu była bezużyteczna. Jeśli możesz określić ciąg formatu {0: d} dla typu DateTime w atrybutach właściwości w Modelu, DisplayFor może być bardziej przydatny.
Możesz dodać selektor daty jQuery do szablonu EditorFor dla typu danych DateTime, aby zawsze pokazywał na przykład selektor daty w formularzach.
Zachary Scott
4
Wydaje mi się, że używanie go ogólnie jest zbyt skomplikowane, ale powinieneś go używać, gdy chcesz sformatować dane wyjściowe dla niektórych atrybutów modelu. Pomocne pytanie i odpowiedź chłopaki, dzięki. +1 dookoła.
Robin Winslow,
co się stanie, jeśli masz dwa modele o tej samej nazwie?
halivingston
77
Myślę, że główną korzyścią byłoby zdefiniowanie własnych szablonów wyświetlania lub użycie adnotacji danych.
Na przykład, jeśli twój tytuł był datą, możesz zdefiniować
[DisplayFormat(DataFormatString="{0:d}")]
a następnie na każdej stronie wyświetlałaby wartość w spójny sposób. W przeciwnym razie może być konieczne dostosowanie wyświetlania na wielu stronach. Tak więc nie pomaga wiele dla zwykłych ciągów, ale pomaga walutom, datom, e-mailom, adresom URL itp.
Na przykład zamiast adresu e-mail będącego zwykłym ciągiem, może pojawiać się jako link:
DisplayForjest również przydatny do tworzenia szablonów. Możesz napisać szablon dla swojego modelu i zrobić coś takiego:
@Html.DisplayFor(m => m)
Podobny do @Html.EditorFor(m => m). Jest to użyteczne dla elementu DRY, abyś nie musiał ciągle pisać tej samej logiki wyświetlania dla tego samego modelu.
Spójrz na tego bloga na temat szablonów MVC2. Nadal ma to zastosowanie do MVC3:
Jest to również przydatne, jeśli Twój model ma adnotację Dane. Na przykład, jeśli właściwość w modelu jest ozdobiona EmailAddressadnotacją danych, DisplayForrenderuje ją jako mailto:łącze.
@Html.DisplayFor(m => m)można również uprościć do just @Html.DisplayForModel().
Brant Bobby,
Co to jest wyrażenie lamda (m => m)? Jakie jest pierwsze m?
Arcadian
1
pierwszy m to nazwa parametru
Sinaesthetic
1
@ magic-c0d3r pierwsze m to obiekt Model strony. Tego używa się w wyrażeniu labmda
Don Cheadle
4
Po pewnym czasie szukając odpowiedzi, mogłem coś znaleźć. ogólnie, jeśli używamy go tylko do jednej właściwości, wygląda to tak samo, nawet jeśli wykonujemy „Wyświetl źródło” wygenerowanego HTML Poniżej jest generowany HTML, na przykład, gdy chcę wyświetlić tylko właściwość Name dla mojej klasy
<td>
myClassNameProperty
</td><td>
myClassNameProperty,Thisis direct fromItem</td>
To jest wygenerowany HTML z poniższego kodu
<td>@Html.DisplayFor(modelItem=>item.Genre.Name)</td><td>@item.Genre.Name,Thisis direct fromItem</td>
Jednocześnie, jeśli chcę wyświetlić wszystkie właściwości w jednej instrukcji dla mojej klasy „Gatunek”, w tym przypadku mogę użyć @ Html.DisplayFor (), aby zaoszczędzić na pisaniu
mogę napisać @ Html.DisplayFor (modelItem => item.Genre) zamiast pisać osobne oświadczenie dla każdej właściwości gatunku, jak poniżej
Myślę, że główną korzyścią byłoby zdefiniowanie własnych szablonów wyświetlania lub użycie adnotacji danych.
Na przykład, jeśli twój tytuł był datą, możesz zdefiniować
a następnie na każdej stronie wyświetlałaby wartość w spójny sposób. W przeciwnym razie może być konieczne dostosowanie wyświetlania na wielu stronach. Tak więc nie pomaga wiele dla zwykłych ciągów, ale pomaga walutom, datom, e-mailom, adresom URL itp.
Na przykład zamiast adresu e-mail będącego zwykłym ciągiem, może pojawiać się jako link:
źródło
DisplayFor
jest również przydatny do tworzenia szablonów. Możesz napisać szablon dla swojego modelu i zrobić coś takiego:Podobny do
@Html.EditorFor(m => m)
. Jest to użyteczne dla elementu DRY, abyś nie musiał ciągle pisać tej samej logiki wyświetlania dla tego samego modelu.Spójrz na tego bloga na temat szablonów MVC2. Nadal ma to zastosowanie do MVC3:
http://www.dalsoft.co.uk/blog/index.php/2010/04/26/mvc-2-templates/
Jest to również przydatne, jeśli Twój model ma adnotację Dane. Na przykład, jeśli właściwość w modelu jest ozdobiona
EmailAddress
adnotacją danych,DisplayFor
renderuje ją jakomailto:
łącze.źródło
@Html.DisplayFor(m => m)
można również uprościć do just@Html.DisplayForModel()
.Po pewnym czasie szukając odpowiedzi, mogłem coś znaleźć. ogólnie, jeśli używamy go tylko do jednej właściwości, wygląda to tak samo, nawet jeśli wykonujemy „Wyświetl źródło” wygenerowanego HTML Poniżej jest generowany HTML, na przykład, gdy chcę wyświetlić tylko właściwość Name dla mojej klasy
To jest wygenerowany HTML z poniższego kodu
Jednocześnie, jeśli chcę wyświetlić wszystkie właściwości w jednej instrukcji dla mojej klasy „Gatunek”, w tym przypadku mogę użyć @ Html.DisplayFor (), aby zaoszczędzić na pisaniu
mogę napisać @ Html.DisplayFor (modelItem => item.Genre) zamiast pisać osobne oświadczenie dla każdej właściwości gatunku, jak poniżej
i tak dalej w zależności od liczby właściwości.
źródło