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的匿名类型中没有特殊含义。