TextBoxFor @Value(大写)代替@value
这只是为了好奇
为什么这段代码有效:
Html.TextBoxFor(x => x.Age, new { @Value = "0"})
这不是:
Html.TextBoxFor(x => x.Age, new { @value = "0"})
注意@Value
的大写’V’
我知道value
是一个关键字,但readonly
也是如此。 没有必要使用@Readonly
(大写’R’)。
有人有线索吗?
我不是100%肯定,但是, value
可能是属性中的关键字, readonly
不是。 查看MSDN中的属性 。
InputExtensions.TextBoxFor
特殊情况,会出现一些属性名称,其中包括value
(区分大小写)。 这与C#关键字无关。
特别是从expression
参数获取的值优先于传递给htmlAttributes
参数的名为value
的属性。
看看你的例子:
-
如果你使用
Html.TextBoxFor(x => x.Age, new { @value = "0"})
它将编译,但TextBoxFor
将覆盖值x.Age
求值为的value
属性。 -
如果您使用
Html.TextBoxFor(x => x.Age, new { @Value = "0"})
它将编译,您将在属性字典中获得两个条目,一个value
"0"
,一个value
,那是x.Age
。我希望输出是无意义的,如
。
我的猜测是MVC代码被硬编码以寻找Value
因为MS工程师希望您始终使用PascalCase属性名称,因为这是他们的典型约定,并且PascalCase避免与非上下文关键字(如class
冲突。 请注意PascalCase属性如何在HTML中呈现为小写。
原因不是将value
作为关键字,因为它是C#中的上下文关键字,并且在属性getter和setter中仅具有特殊含义(因此在IDE中变为蓝色)。 它在传递给TextBoxFor
的匿名类型中没有特殊含义。