/ / Inkonsistente Null-Attribut-Behandlung in ASP.NET MVC 4 - asp.net-mvc, asp.net-mvc-4, Rasierer, HTML-Helfer

Inkonsistente Null-Attribut-Behandlung in ASP.NET MVC 4 - asp.net-mvc, asp.net-mvc-4, Rasierer, HTML-Helfer

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 № 1

Das 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.