2015-11-05 12 views
5

Innen Rasierer Ansicht benutzen ich Modell für Etiketten Rendering wieAnwenden von CSS-Klasse mit Html.DisplayFor innen Rasierer Ansicht

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

und jetzt will ich es Wert verwenden. Wert, so habe ich versucht, mit DisplayFor wie

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

diese CSS-Klasse control-label col-md-6 ist nicht anwendbar. Warum?

+0

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

Antwort

9

DisplayFor funktioniert nicht wie die anderen *For Helfer. Wie EditorFor ist es, was als "Vorlagenhelfer" bezeichnet wird. Mit anderen Worten, was es rendert wird durch eine Vorlage gesteuert, die geändert werden kann. Wichtig ist, dass für beide Methoden, wenn Sie ihre Dokumentation in MSDN nachschlagen, Sie sehen, dass der Parameter, der normalerweise htmlAttributes mit den anderen Helfern entsprechen würde, stattdessen auf additionalViewData mit diesen beiden verweist. Dies liegt daran, dass ihre Ausgabe wiederum von im Wesentlichen Ansichten gesteuert wird, die ViewData einnehmen.

Zusätzlich, mit DisplayFor im Besonderen, die Standardvorlagen ziemlich nur den Wert, ohne HTML ausgeben. Wenn Sie beispielsweise eine String-Eigenschaft übergeben, ist die Ausgabe der Wert dieser Zeichenfolge und nichts anderes. Daher gibt es nichts, womit die HTML-Attribute verknüpft werden könnten, selbst wenn Sie sie übergeben könnten.

Wenn Sie das tun möchten, was Sie tun möchten, müssen Sie benutzerdefinierte Anzeigevorlagen erstellen. Dies kann durch Zugabe Ansichten nach types (z String, Boolean, Byte etc.) genannt erfolgen oder Mitglieder der DataType enum (CreditCard, EmailAddress etc.), zu Views\Shared\DisplayTemplates. Wenn Sie beispielsweise eine Ansicht unter Views\Shared\DisplayTemplates\String.cshtml erstellt haben, wurde diese Ansicht beim Rendern der DisplayFor mit einer Eigenschaft des Typs string zum Rendern verwendet. Sie könnten dann den Wert umbrechen, der sonst nur direkt in HTML Ihrer Wahl ausgegeben würde, und ViewData verwenden, um die entsprechenden HTML-Attribute anzuwenden. Zum Beispiel:

<span class="@ViewData["class"]">@ViewData.TemplateInfo.FormattedModelValue</span> 
13

Der Unterschied besteht darin, dass @Html.LabelFor Helferfunktion einen <label></label> Tag macht und die @Html.DisplayFor Helferfunktion macht keinen HTML-Tag, sondern macht es Klartext. Zum Beispiel der folgende Code:

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

gibt Rohtext:

Martin 

man bedenkt, dass MyName den Wert "Martin" hatte. Und der Code:

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

zurückkehren wird:

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

den Unterschied in Betracht.

Verwenden folgende (wenn Sie @ Html.DisplayFor verwenden möchten):

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

= dort. @ Html.DisplayFor (model => model.MyName) coder771

+1

Ich glaube nicht, dass dies korrekt ist - wird LabelFor den * name * der Eigenschaft zurückgeben, und nicht den Wert "Martin"? – msulis

Verwandte Themen