2015-11-05 14 views
5
widok

Wewnątrz brzytwa Kiedyś model renderowania etykiety jakZastosowanie klasy CSS za pomocą Html.DisplayFor wewnątrz widok maszynki

@Html.LabelFor(model => model.MyName, htmlAttributes: new { @class = "control-label col-md-6" }) 

i teraz chcę użyć to wartość zamiast adnotacji dane attr. Wartość tak próbowałem z Displayfor jak

@Html.DisplayFor(model => model.MyName, new { @class = "control-label col-md-6" }) 

ta klasa css control-label col-md-6 nie ma zastosowania. Dlaczego?

+0

http://stackoverflow.com/questions/11655810/how-do-i-edit-the-css-of- the-html-displayfor-method-in-mvc-3 – AAlferez

Odpowiedz

9

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> 
13

Różnica polega na tym, że @Html.LabelFor funkcji pomocnika świadczy <label></label> znacznik, a funkcja @Html.DisplayFor pomocniczych nie czyni żadnej znacznika html, lecz zamiast tego czyni tekstowym. Na przykład następujący kod:

@Html.DisplayFor(model => model.MyName, new { @class = "control-label col-md-6" }) 

zwraca tekst surowego:

Martin 

zważywszy że MyName miał wartość "Martin". I kod:

@Html.LabelFor(model => model.MyName, htmlAttributes: new { @class = "control-label col-md-6" }) 

powróci:

<label class="control-label col-md-6">Martin</label> 

Rozważmy różnicę.

Użyj następujących (jeśli chcesz używać @ Html.DisplayFor):

<span class"control-label col-md-6">@Html.DisplayFor(model => model.MyName)</span> 
+1

needs = there. @ Html.DisplayFor (model => model.MyName) coder771

+1

Nie sądzę, że to jest poprawne - czy LabelFor nie zwróci * nazwy * nieruchomości, a nie wartości "Martin"? – msulis

Powiązane problemy