Dies ist nur aus Neugier
Warum funktioniert dieser Code?
%Vor%und das nicht:
%Vor% Beachten Sie das Großbuchstabe "V" in @Value
Ich weiß value
ist ein Schlüsselwort, aber auch readonly
und es funktioniert. Es ist nicht notwendig, @Readonly
(mit Großbuchstaben 'R') zu verwenden.
Hat jemand eine Ahnung?
Ich bin mir nicht 100% sicher, aber das könnte sein value
ist ein Schlüsselwort in Eigenschaften, readonly
ist es nicht. Sehen Sie sich Eigenschaften von MSDN an .
InputExtensions.TextBoxFor
spezielle Fälle Fälle ein paar Attribut Namen, darunter value
(Groß- / Kleinschreibung beachten). Dies steht nicht im Zusammenhang mit C # -Schlüsselwörtern.
Insbesondere hat der aus dem Parameter expression
erhaltene Wert Vorrang vor einer Eigenschaft namens value
, die Sie in den Parameter htmlAttributes
übergeben.
Schauen Sie sich Ihr Beispiel an:
Wenn Sie Html.TextBoxFor(x => x.Age, new { @value = "0"})
verwenden, wird es kompiliert, aber TextBoxFor
überschreibt das Attribut value
mit dem Wert x.Age
, der ausgewertet wird.
Wenn Sie Html.TextBoxFor(x => x.Age, new { @Value = "0"})
verwenden, wird es kompiliert, und Sie erhalten zwei Einträge im Attributwörterbuch, ein Value
, das ist "0"
, und ein value
, das ist x.Age
.
Ich erwarte, dass die Ausgabe etwas unsinniges ist wie <input Value="0" value="..." type="text"/>
.
Meine Vermutung ist, dass der MVC-Code hart codiert ist, um nach Value
zu suchen, weil ein MS-Ingenieur Sie immer PascalCase-Eigenschaftsnamen verwenden wollte, da dies ihre typische Konvention ist und PascalCase Konflikte mit nicht kontextabhängigen Schlüsselwörtern wie% co_de vermeidet %. Beachten Sie, dass PascalCase-Eigenschaften im HTML-Format als Kleinbuchstaben dargestellt werden.
Der Grund ist nicht, dass class
ein Schlüsselwort ist, da es ein kontextbezogenes Schlüsselwort in C # ist und nur eine spezielle Bedeutung in Eigenschaften-Getter und Setter hat (und daher in der IDE blau wird). Es hat keine besondere Bedeutung im anonymen Typ, der an value
übergeben wurde.
Tags und Links asp.net-mvc c# keyword html.textboxfor