Asp.Net MVC 2.0 Preview Builds bieten Hilfen wie
Html.EditorFor(c => c.propertyname)
Wenn der Eigenschaftsname string ist, wird mit dem obigen Code eine Texbox gerendert.
Was ist, wenn ich die Eigenschaften MaxLength und Size an das Textfeld oder meine eigene CSS-Klasseneigenschaft übergeben möchte?
Muss ich für jede Größen- und Längenkombination in meiner Anwendung eine Vorlage erstellen? Wenn ja, werden die Standardvorlagen dadurch nicht verwendet.
c#
asp.net-mvc
asp.net-mvc-2
chandmk
quelle
quelle
Ich habe dieses Problem gelöst, indem ich eine EditorTemplate mit dem Namen String.ascx in meinem Ordner / Views / Shared / EditorTemplates erstellt habe:
Aus meiner Sicht benutze ich
Funktioniert wie ein Zauber für mich!
quelle
Keine der Antworten in diesem oder einem anderen Thread zum Festlegen von HTML-Attributen für @ Html.EditorFor hat mir sehr geholfen. Allerdings habe ich bei eine gute Antwort gefunden
Styling eines @ Html.EditorFor-Helfers
Ich habe den gleichen Ansatz verwendet und es hat wunderbar funktioniert, ohne viel zusätzlichen Code zu schreiben. Beachten Sie, dass das ID-Attribut der HTML-Ausgabe von Html.EditorFor festgelegt ist. Der Ansichtscode
Die Modelleigenschaft mit Datenanmerkung und Datumsformatierung als "TT MMM JJJJ"
Arbeitete wie ein Zauber, ohne viel zusätzlichen Code zu schreiben. Diese Antwort verwendet ASP.NET MVC 3 Razor C #.
quelle
Vielleicht möchten Sie sich Kiran Chands Blog-Beitrag ansehen. Er verwendet benutzerdefinierte Metadaten für das Ansichtsmodell wie:
Dies wird mit benutzerdefinierten Vorlagen kombiniert, die die Metadaten verwenden. Meiner Meinung nach ein sauberer und einfacher Ansatz, aber ich würde mir wünschen, dass dieser allgemeine Anwendungsfall in mvc integriert ist.
quelle
EditorFor
indem Sie es übergeben als:new { htmlAttributes: { @class = "yourclass" } }
Ich bin überrascht, dass niemand erwähnt hat, dass er es in "AdditionalViewData" weitergegeben und auf der anderen Seite gelesen hat.
Ansicht (aus Gründen der Übersichtlichkeit mit Zeilenumbrüchen):
Editor-Vorlage:
quelle
Das Problem ist, dass Ihre Vorlage mehrere HTML-Elemente enthalten kann, sodass MVC nicht weiß, auf welches Ihre Größe / Klasse angewendet werden soll. Sie müssen es selbst definieren.
Lassen Sie Ihre Vorlage von Ihrer eigenen Klasse namens TextBoxViewModel ableiten:
}}
In der Vorlage können Sie dies tun:
Aus Ihrer Sicht tun Sie:
Das erste Formular rendert die Standardvorlage für die Zeichenfolge. Das zweite Formular rendert die benutzerdefinierte Vorlage.
Alternative Syntax verwenden fließende Schnittstelle:
}}
Beachten Sie, dass Sie dies nicht in der Ansicht, sondern auch im Controller oder viel besser im ViewModel tun können:
Beachten Sie auch, dass Sie die Basis-TemplateViewModel-Klasse erstellen können - eine gemeinsame Grundlage für alle Ihre Ansichtsvorlagen -, die grundlegende Unterstützung für Attribute / etc. Enthält.
Aber im Allgemeinen denke ich, dass MVC v2 eine bessere Lösung braucht. Es ist immer noch Beta - frag danach ;-)
quelle
Ich denke, CSS ist der richtige Weg. Ich wünschte, ich könnte mehr mit .NET-Codierung tun, wie in XAML, aber im Browser ist CSS König.
Site.css
.cshtml
Joe
quelle
EditorFor
Vorlage vorzunehmen . Ich benutze MVC4 und das hat super funktioniert.Wenn Sie wie bei MVC 5 Attribute hinzufügen möchten, können Sie dies einfach tun
Informationen aus diesem Blog gefunden
quelle
Sie können Attribute für Ihre Eigenschaften definieren.
Dies ist bekannt als
System.ComponentModel.DataAnnotations
. Wenn Sie das benötigte nicht findenValidationAttribute
, können Sie immer benutzerdefinierte Attribute definieren.Beste Grüße, Carlos
quelle
Dies ist möglicherweise nicht die beste Lösung, aber es ist unkompliziert. Sie können eine Erweiterung für die Klasse HtmlHelper.EditorFor schreiben. In dieser Erweiterung können Sie einen Optionsparameter angeben, der die Optionen für den Helfer in die ViewData schreibt. Hier ist ein Code:
Zunächst die Erweiterungsmethode:
Als nächstes das Optionsobjekt:
Und zum Schluss noch die Zeile aus der String.ascx-Vorlage:
Ehrlich gesagt denke ich, dass dies für die arme Seele, die Ihren Code später beibehalten muss, unkompliziert und klar ist. Und es ist einfach, verschiedene andere Informationen zu erweitern, die Sie an Ihre Vorlagen weitergeben möchten. Bisher funktioniert es gut für mich in einem Projekt, in dem ich versuche, so viel wie möglich in eine Reihe von Vorlagen zu packen, um die Standardisierung des umgebenden HTML-Codes zu unterstützen, a la http://bradwilson.typepad.com/blog/2009/ 10 / aspnet-mvc-2-templates-part-5-master-page-templates.html .
quelle
Ich habe einen Blogeintrag geschrieben, um meine eigene Frage zu beantworten
Unterstützung für HTML-Attribute für Vorlagen hinzufügen - ASP.Net MVC 2.0 Beta
quelle
Ich weiß nicht, warum es für Html.EditorFor nicht funktioniert, aber ich habe TextBoxFor ausprobiert und es hat für mich funktioniert.
... und auch die Validierung funktioniert.
quelle
@class = "className"
In meiner Praxis habe ich festgestellt, dass es am besten ist, EditorTemplates mit nur einem HtmlHelper zu verwenden - TextBox, das in den meisten Fällen der Fall ist. Wenn ich eine Vorlage für eine komplexere HTML-Struktur möchte, schreibe ich einen separaten HTML-Helfer.
Vorausgesetzt, wir können das gesamte ViewData-Objekt anstelle von htmlAttributes der TextBox verwenden. Darüber hinaus können wir Anpassungscode für einige der Eigenschaften der ViewData schreiben, wenn sie einer besonderen Behandlung bedürfen:
Unten finden Sie Beispiele für die Syntax in der Ansicht und das ausgegebene HTML:
quelle
Da die Frage für EditorFor nicht TextBoxFor WEFX ist, funktioniert der Vorschlag nicht.
Zum Ändern einzelner Eingabefelder können Sie die Ausgabe der EditorFor-Methode verarbeiten:
Es ist auch möglich, ALLE Ihre EditorFors zu ändern, da MVC die Klasse der EditorFor-Textfelder mit .text-box festlegt . Daher können Sie diesen Stil einfach in Ihrem Stylesheet oder auf der Seite überschreiben.
Außerdem können Sie den Stil für festlegen
quelle
Ich hatte auch Probleme beim Festlegen der Breite von TextBox in MVC3, während das Festlegen des Clsss-Attributs für das TextArea-Steuerelement, jedoch nicht für das TextBoxFor-Steuerelement oder das EditorFor-Steuerelement funktionierte:
Ich habe versucht zu folgen und das hat bei mir funktioniert:
@ Html.TextBoxFor (model => model.Title, new {Class = "textBox", style = "width: 90%;"})
auch in diesem Fall funktionieren Validierungen einwandfrei.
quelle
Eine Möglichkeit, dies zu umgehen, besteht darin, Delegierte im Ansichtsmodell zu haben, die das Ausdrucken eines solchen speziellen Renderings übernehmen. Ich habe dies für eine Paging-Klasse getan und eine öffentliche Eigenschaft für das Modell verfügbar gemacht
Func<int, string> RenderUrl
damit umzugehen.Definieren Sie also, wie das benutzerdefinierte Bit geschrieben wird:
Geben Sie die Ansicht für die
Paging
Klasse aus:... und für die aktuelle
Paging
Ansicht:Es könnte als übermäßig kompliziert angesehen werden, aber ich benutze diese Pager überall und konnte es nicht ertragen, denselben Code für das Boilerplate zu sehen, um sie zu rendern.
quelle
UPDATE: hm, das funktioniert natürlich nicht, da das Modell als Wert übergeben wird und die Attribute nicht erhalten bleiben. aber ich lasse diese Antwort als Idee.
Ich denke, eine andere Lösung wäre, Ihre eigenen TextBox / etc-Helfer hinzuzufügen, die nach Ihren eigenen Attributen im Modell suchen.
Dieser ist einfacher, aber nicht so praktisch / flexibel.
quelle
Dies ist der sauberste und eleganteste / einfachste Weg, um hier eine Lösung zu finden.
Genialer Blog-Beitrag und kein chaotischer Overkill beim Schreiben von benutzerdefinierten Erweiterungs- / Hilfsmethoden wie bei einem verrückten Professor.
http://geekswithblogs.net/michelotti/archive/2010/02/05/mvc-2-editor-template-with-datetime.aspx
quelle
Die Antwort von @tjeerdans, bei der die EditorTemplate mit dem Namen String.ascx im Ordner / Views / Shared / EditorTemplates verwendet wird, hat mir sehr gut gefallen. Es scheint die direkteste Antwort auf diese Frage zu sein. Ich wollte jedoch eine Vorlage mit Razor-Syntax. Darüber hinaus scheint MVC3 die Zeichenfolgenvorlage als Standard zu verwenden (siehe die StackOverflow-Frage " MVC-Anzeigevorlage für Zeichenfolgen wird für Ganzzahlen verwendet "), sodass Sie das Modell auf Objekt anstatt auf Zeichenfolge festlegen müssen. Meine Vorlage scheint bisher zu funktionieren:
quelle
Ich habe es gelöst !!
Für Razor lautet die Syntax:
@Html.TextAreaFor(m=>m.Address, new { style="Width:174px" })
Hiermit wird die Breite des Textbereichs an die Breite angepasst, die ich im Stilparameter definiert habe.Für ASPx lautet die Syntax:
<%=Html.TextAreaFor(m => m.Description, new { cols = "20", rows = "15", style="Width:174px" })%>
Dies reicht aus
quelle