Gibt es eine Möglichkeit, die grundlegenden HTML-Helfer ( TextBoxFor
, TextAreaFor
, etc.) mit Erweiterungsmethoden auf ihre Ausgabe zu erweitern, anstatt die gesamte Methode komplett neu zu schreiben? Zum Beispiel hinzufügen in ...
@Html.TextBoxFor( model => model.Name ).Identity("idName")
Ich weiß, dass ich dies mit den folgenden bereits erreichen kann.
@Html.TextBoxFor( model => model.Name, new { @id = "idName" })
Aber das wird klobig und frustrierend zu verwalten, wenn Sie eine Menge Eigenschaften hinzufügen müssen. Gibt es eine Möglichkeit, Erweiterungen zu diesen inhärent hinzuzufügen, ohne nur htmlAttributes
für jedes Detail einzugeben?
Wie @AaronShockley sagt, weil TextBoxFor()
eine MvcHtmlString
zurückgibt, wäre Ihre einzige Option für die Entwicklung eines 'fluid API'-Stils zur Änderung der Ausgabe die Operation MvcHtmlString
s, die von den Hilfsmethoden zurückgegeben wird. Eine etwas andere Art, dies zu tun, von der ich denke, dass sie sich dem annähert, was Sie anstreben, wäre die Verwendung eines 'Eigenschaften-Builder' -Objekts, wie folgt:
... und Erweiterungs-Methoden wie folgt einzurichten:
%Vor%Sie können dann in Ihrer Ansicht so etwas tun:
%Vor%Dies gibt Ihnen eine starke Eingabe und Intellisense für Eingabeeigenschaften, die Sie für jede Erweiterungsmethode anpassen können, indem Sie Eigenschaften zu einer entsprechenden MvcInputBuilder-Unterklasse hinzufügen.
Alle grundlegenden HTML-Helfer geben ein Objekt vom Typ System.Web.Mvc.MvcHtmlString
zurück. Sie können Erweiterungsmethoden für diese Klasse einrichten. Hier ist ein Beispiel:
Dann können Sie diese in einer Ansicht wie:
verwenden %Vor%Um Erweiterungsmethoden zu erstellen, die Attribute für das gerenderte HTML-Tag ändern, müssen Sie das Ergebnis in eine Zeichenfolge konvertieren und den gesuchten Wert suchen und ersetzen.
%Vor% Die Attribute id
und name
werden immer von den html-Helfern hinzugefügt, aber wenn Sie mit Attributen arbeiten möchten, die möglicherweise nicht dort sind (und Sie müssen sie hinzufügen, anstatt sie nur zu ersetzen), dann Ich muss den Code ändern.
Tags und Links asp.net-mvc-3