DisplayFor
nie działa tak, jak inni pomocnicy *For
. Podobnie jak EditorFor
, jest to tak zwane "szablonowy pomocnik". Innymi słowy, to, co renderuje, jest kontrolowane przez szablon, który można modyfikować. Co ważne, w przypadku obu tych metod, jeśli przejrzysz ich dokumentację w MSDN, zobaczysz, że parametr, który byłby normalny, odpowiadałby htmlAttributes
z innymi pomocnikami, zamiast tego odnosi się do additionalViewData
z tymi dwoma. Dzieje się tak dlatego, że znowu ich wydajność jest kontrolowana przez zasadniczo widoki, które pobierają ViewData
.
Dodatkowo, w szczególności z DisplayFor
domyślnymi szablonami jest właśnie wynik, bez HTML. Jeśli na przykład przekażesz właściwość string, wynikiem będzie wartość tego łańcucha i nic więcej. Dlatego nie ma nic, co wiązałoby atrybuty HTML, nawet jeśli mógłbyś je przekazać.
Jeśli chcesz zrobić to, co próbujesz zrobić, musisz utworzyć niestandardowe szablony wyświetlania. Można tego dokonać dodając widoki nazwane po types (np. String
, Boolean
, Byte
itp.) Lub członkami DataType
enum (CreditCard
, EmailAddress
itp.), Na Views\Shared\DisplayTemplates
. Na przykład, jeśli utworzono widok pod adresem Views\Shared\DisplayTemplates\String.cshtml
, to po wywołaniu DisplayFor
z właściwością typu string
widok ten zostanie wykorzystany do renderowania. Następnie można zawijać wartość, która w innym przypadku byłaby bezpośrednio wyprowadzana bezpośrednio w wybranym kodzie HTML i wykorzystywać ViewData
do stosowania odpowiednich atrybutów HTML. Np
<span class="@ViewData["class"]">@ViewData.TemplateInfo.FormattedModelValue</span>
http://stackoverflow.com/questions/11655810/how-do-i-edit-the-css-of- the-html-displayfor-method-in-mvc-3 – AAlferez