这只是为了好奇
为什么此代码有效:
Html.TextBoxFor(x => x.Age, new { @Value = "0"})
这不会:
Html.TextBoxFor(x => x.Age, new { @value = "0"})
注意大写的“V”@Value
我知道value
是一个关键字,但它也是readonly
,而且它有效。没有必要使用@Readonly
(带有大写“R”)。
有人有线索吗?
这只是为了好奇
为什么此代码有效:
Html.TextBoxFor(x => x.Age, new { @Value = "0"})
这不会:
Html.TextBoxFor(x => x.Age, new { @value = "0"})
注意大写的“V”@Value
我知道value
是一个关键字,但它也是readonly
,而且它有效。没有必要使用@Readonly
(带有大写“R”)。
有人有线索吗?
InputExtensions.TextBoxFor
特殊情况下有几个属性名称,其中value
(区分大小写)。这与 C# 关键字无关。
特别是从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"/>
.
我不是 100% 确定,但是,这可能value
是属性中的关键字,readonly
不是。查看MSDN 中的属性。
我的猜测是 MVC 代码是硬编码的,Value
因为 MS 工程师希望您始终使用 PascalCase 属性名称,因为这是他们的典型约定,并且 PascalCase 避免与非上下文关键字(例如class
. 请注意 PascalCase 属性如何在 HTML 中呈现为小写。
原因不value
在于成为关键字,因为它是 C# 中的上下文关键字,并且仅在属性获取器和设置器中具有特殊含义(因此在 IDE 中变为蓝色)。它在传递给的匿名类型中没有特殊含义TextBoxFor
。