Ich versuche, einer Eingabe eine Klasse hinzuzufügen.
Das funktioniert nicht:
@Html.EditorFor(x => x.Created, new { @class = "date" })
asp.net-mvc
asp.net-mvc-3
razor
user137348
quelle
quelle
Antworten:
Das Hinzufügen einer Klasse zu
Html.EditorFor
macht keinen Sinn, da Sie in der Vorlage viele verschiedene Tags haben können. Sie müssen die Klasse also in der Editorvorlage zuweisen:und in der benutzerdefinierten Vorlage:
quelle
Ab ASP.NET MVC 5.1 ist das Hinzufügen einer Klasse zu einer
EditorFor
möglich (die ursprüngliche Frage hat ASP.NET MVC 3 angegeben, und die akzeptierte Antwort ist mit der berücksichtigten immer noch die beste).Siehe: Neue Funktionen in ASP.NET MVC 5.1, Bootstrap-Unterstützung für Editorvorlagen
quelle
Sie können keine Klasse für das generische EditorFor festlegen. Wenn Sie den gewünschten Editor kennen, können Sie ihn sofort verwenden und dort die Klasse festlegen. Sie müssen keine benutzerdefinierten Vorlagen erstellen.
quelle
Sie können verwenden:
(Zumindest mit ASP.NET MVC 5, aber ich weiß nicht, wie das mit ASP.NET MVC 3 war.)
quelle
Ich hatte das gleiche frustrierende Problem und wollte keine EditorTemplate erstellen, die auf alle DateTime-Werte angewendet wurde (es gab Zeiten in meiner Benutzeroberfläche, in denen ich die Uhrzeit und keinen Dropdown-Kalender für die jQuery-Benutzeroberfläche anzeigen wollte). Bei meinen Nachforschungen stieß ich auf folgende Grundprobleme:
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
, aber es erlaubt mir nicht, die benutzerdefinierte "Datumsauswahl" -Klasse anzuwenden.Daher habe ich eine benutzerdefinierte HtmlHelper-Klasse erstellt, die die folgenden Vorteile bietet:
Diese Methode ersetzt dies durch eine leere Zeichenfolge.
Und für diejenigen, die die JQuery-Syntax kennen möchten, die nach Objekten mit der
date-picker
Klassendekoration sucht, um dann den Kalender zu rendern, ist dies:quelle
DateTimePickerFor
Sie das Datumsfeld des Modells verwenden und aktualisieren, das Sie mit[DataType(DataType.Date)]
oder darstellen[DataType(DataType.DateTime)]
? Sie können es auch beispielsweise in die Form MM / TT / JJJJ mit.ParseFormats(new string[] { "MM/dd/yyyy" })
(oder ganz einfach nach Belieben ändern). Wenn es null ist, wird das Feld als leer@MyHtmlHelpers.CalenderTextBoxFor(model => model.ExpirationDate)
. Irgendwelche Ideen, wie man das umsetzt?Es ist möglich, eine Klasse oder andere Informationen über AdditionalViewData bereitzustellen. Ich verwende diese Option, wenn ein Benutzer ein Formular basierend auf Datenbankfeldern (propertyName, editorType und editorClass) erstellen kann.
Basierend auf Ihrem ersten Beispiel:
und in der benutzerdefinierten Vorlage:
quelle
Es gibt keine
EditorFor
Überschreibung, mit der Sie ein anonymes Objekt übergeben können, dessen Eigenschaften als Attribute für ein Tag hinzugefügt werden, insbesondere für die integrierten Editorvorlagen. Sie müssten Ihre eigene benutzerdefinierte Editorvorlage schreiben und den gewünschten Wert als zusätzliche Ansichtsdaten übergeben.quelle
Es können keine Argumente für das Textfeld übergeben werden
So können Sie Attribute anwenden.
quelle
Mit jQuery können Sie dies ganz einfach tun:
Hier ist Ihr Eingabe-Tag
Für DropDownlist können Sie Folgendes verwenden:
Für Dropdown-Liste:
quelle
Während die Frage auf MVC 3.0 gerichtet war, stellen wir fest, dass das Problem auch in MVC 4.0 weiterhin besteht. MVC 5.0 enthält jetzt nativ eine Überladung für htmlAttributes.
Ich bin gezwungen, MVC 4.0 an meinem derzeitigen Arbeitsplatz zu verwenden, und musste eine CSS-Klasse für die JQuery-Integration hinzufügen. Ich habe dieses Problem mit einer einzigen Erweiterungsmethode gelöst ...
Verlängerungsmethode:
Verwendung von HTML-Markups:
(Stellen Sie sicher, dass der Namespace der Erweiterungsmethode in der Rasiereransicht enthalten ist.)
Erläuterung: Die Idee ist, in den vorhandenen HTML-Code einzufügen. Ich habe mich dafür entschieden, das aktuelle Element mit Linq-to-XML zu analysieren
XDocument.Parse()
. Ich übergebe die htmlAttributes als Typobject
. Ich verwende MVCRouteValueDictionary
, um die übergebenen htmlAttributes zu analysieren. Ich füge die Attribute dort zusammen, wo sie bereits vorhanden sind, oder füge ein neues Attribut hinzu, wenn es noch nicht vorhanden ist.Für den Fall, dass die Eingabe nicht analysiert werden kann
XDocument.Parse()
, gebe ich alle Hoffnung auf und gebe die ursprüngliche Eingabezeichenfolge zurück.Jetzt kann ich den Vorteil von DisplayFor nutzen (Datentypen wie Währung entsprechend rendern), aber auch CSS-Klassen (und jedes andere Attribut für diese Angelegenheit) angeben. Kann hilfreich sein, um Attribute wie
data-*
oderng-*
(Angular) hinzuzufügen .quelle
Sie können dasselbe Verhalten erstellen, indem Sie einen einfachen benutzerdefinierten Editor namens DateTime.cshtml erstellen und in Views / Shared / EditorTemplates speichern
und in Ihren Ansichten
Beachten Sie, dass ich in meinem Beispiel zwei CSS-Klassen und das Datumsformat fest codiere. Das können Sie natürlich ändern. Sie können dasselbe auch mit anderen HTML-Attributen tun, z. B. schreibgeschützt, deaktiviert usw.
quelle
Ich habe eine andere Lösung mit CSS-Attributselektoren verwendet, um das zu erhalten, was Sie benötigen.
Geben Sie das HTML-Attribut an, das Sie kennen, und geben Sie den gewünschten relativen Stil ein.
Wie unten:
quelle
Es ist nicht erforderlich, eine benutzerdefinierte Vorlage für MVC 4 zu erstellen. Verwenden Sie TextBox anstelle von EditF. Hier werden spezielle HTML-Attribute nicht unterstützt. Sie werden nur von MVC 5 unterstützt. TextBox sollte MVC 4 unterstützen. Ich kenne keine andere Version.
quelle
Sie können dies auch über jQuery tun:
quelle
Ich musste nur die Größe eines Textfelds auf einer Seite festlegen. Das Codieren von Attributen für das Modell und das Erstellen von benutzerdefinierten Editorvorlagen waren übertrieben, daher habe ich den Aufruf @ Html.EditorFor mit einem span-Tag versehen, das eine Klasse aufruft, die die Größe des Textfelds angibt.
CSS-Klassendeklaration:
Code anzeigen:
quelle
Eine beste Möglichkeit, Klasse
@Html.EditorFor()
in MVC3 RAzor anzuwenden, istEs wird Ihren obigen Stil hinzufügen
EditorFor()
Es funktioniert für MVC3.
quelle