Ich habe versucht, mit optionalem HTML umzugehen required
und readonly
Attribute in ASP.NET MVC 4. Zu meiner Überraschung habe ich das herausgefunden null
Attribute in HTML-Helfern werden als leere Zeichenfolgen dargestellt, während sie in Razor vollständig entfernt werden (gewünschtes Verhalten).
Zum Beispiel, dieser Code:
@{ string disabled = null; string @readonly = null; }
@Html.TextBox("t1", "Value", new { disabled, @readonly })
<input type="text" name="t2" value="Value" disabled="@disabled" readonly="@(@readonly)" />
Rendert:
<input disabled="" id="t1" name="Txt1" readonly="" type="text" value="Value" />
<input type="text" name="t2" value="Value" />
Grundsätzlich möchte ich wissen:
- Was ist der Grund für diese zwei unterschiedlichen Verhaltensweisen?
- Gibt es eine Möglichkeit, das gleiche Ergebnis zu erhalten?
Html.TexBox
ohne irgendeinen benutzerdefinierten Code zu schreiben?
BEARBEITEN
Dies ist nicht möglich, ohne einen benutzerdefinierten HTML-Helper zu schreiben, aber dafür gibt es eine Feature-Anfrage CodePlex.
Antworten:
1 für die Antwort № 1Das Html.TextBox()
Verhalten kommt von Code in System.Web.Mvc.Html
das verwandelt a RouteValueDictionary
von Attributen in tatsächlichen HTML. (Ich glaube, dass Code ist in TagBuilder
)
Das unformatierte HTML-Tag-Verhalten stammt von einer Funktion im Razor v2-Sprachenparser, die Attribute in Razor-Markup entfernt, die aufgelöst werden null
zur Laufzeit.