TextBoxFor @Value (Großbuchstabe) anstelle von @value

8

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?

    
Diego 03.01.2013, 16:01
quelle

3 Antworten

3

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 .

    
Soner Gönül 03.01.2013, 16:21
quelle
5

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"/> .

CodesInChaos 03.01.2013 17:03
quelle
0

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.

    
Edward Brey 07.03.2013 12:54
quelle