Ответ 1
Я не уверен на 100%, но это может быть value
- это ключевое слово в свойствах, readonly
- нет. Посмотрите свойства из MSDN.
Это просто для любопытства
Почему этот код работает:
Html.TextBoxFor(x => x.Age, new { @Value = "0"})
и это не так:
Html.TextBoxFor(x => x.Age, new { @Value = "0"})
Обратите внимание на верхний регистр "V" в @Value
Я знаю, что value
- это ключевое слово, но это также readonly
, и оно работает. Нет необходимости использовать @Readonly
(с верхним регистром "R" ).
Есть ли у кого-нибудь ключ?
Я не уверен на 100%, но это может быть value
- это ключевое слово в свойствах, readonly
- нет. Посмотрите свойства из MSDN.
InputExtensions.TextBoxFor
в особых случаях используется несколько имен атрибутов, среди которых value
(с учетом регистра). Это не связано с ключевыми словами С#.
В частности, значение, полученное из параметра expression
, имеет приоритет свойства, называемого value
, которое вы передаете в параметр htmlAttributes
.
Взглянув на ваш пример:
Если вы используете Html.TextBoxFor(x => x.Age, new { @value = "0"})
, он скомпилируется, но TextBoxFor
переопределит атрибут value
со значением x.Age
.
Если вы используете Html.TextBoxFor(x => x.Age, new { @value = "0"})
, он скомпилируется, и вы получите две записи в словаре атрибутов, один value
, который "0"
и один value
, который x.Age
.
Я ожидаю, что результат будет чем-то бессмысленным, как <input Value="0" value="..." type="text"/>
.
Я предполагаю, что код MVC жестко закодирован, чтобы искать Value
, потому что инженер MS предполагал, что вы всегда используете имена свойств PascalCase, так как их типичное соглашение и PascalCase избегают конфликтов с неконтективными ключевыми словами, такими как class
. Обратите внимание, как свойства PascalCase отображаются в HTML как строчные.
Причина не в том, что Value
является ключевым словом, так как это ключевое слово контекста в С# и имеет особое значение (и, таким образом, становится синим в среде IDE) в свойствах getter и seters. Он не имеет особого значения в анонимном типе, переданном TextBoxFor
.