TextBoxFor @Value (uppercase) instead @value

前端 未结 3 1057
南旧
南旧 2021-02-15 17:49

This is just for curiosity

Why does this code work:

Html.TextBoxFor(x => x.Age, new { @Value = \"0\"})

and this doe

相关标签:
3条回答
  • 2021-02-15 18:16

    My guess is that the MVC code is hard coded to look for Value because a MS engineer intended you to always use PascalCase property names, since that's their typical convention and PascalCase avoids conflicts with non-contextual keywords such as class. Notice how PascalCase properties get rendered in the HTML as lowercase.

    The reason is not about value being a keyword, since it's a contextual keyword in C# and only has special meaning (and thus turns blue in the IDE) in property getters and setters. It has no special meaning in the anonymous type passed to TextBoxFor.

    0 讨论(0)
  • 2021-02-15 18:18

    I'm not 100% sure but, that could be value is a keyword in properties, readonly isn't. Look at properties from MSDN.

    enter image description here

    enter image description here

    0 讨论(0)
  • 2021-02-15 18:22

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

    0 讨论(0)
提交回复
热议问题