This is just for curiosity
Why does this code work:
Html.TextBoxFor(x => x.Age, new { @Value = "0"})
and this doesn't:
Html.TextBoxFor(x => x.Age, new { @value = "0"})
Note the uppercase 'V' in @Value
I know value
is a keyword, but so is readonly
and it works. It's not necessary to use @Readonly
(with uppercase 'R').
Does anybody have a clue?
InputExtensions.TextBoxFor
special cases cases a few attribute names, among them value
(case sensitive). This is unrelated to C# keywords.
In particular the value obtained from the expression
parameter takes precedence of a property called value
you pass into the htmlAttributes
parameter.
Taking a look at your example:
If you use Html.TextBoxFor(x => x.Age, new { @value = "0"})
it will compile, but TextBoxFor
will override the value
attribute with the value x.Age
evaluates to.
If you use Html.TextBoxFor(x => x.Age, new { @Value = "0"})
it will compile, and you will get two entries in the attribute dictionary, one Value
that's "0"
, and one value
, that's x.Age
.
I expect the output to be something nonsensical like <input Value="0" value="..." type="text"/>
.
I'm not 100% sure but, that could be value
is a keyword in properties, readonly
isn't. Look at properties from MSDN.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With