,这只是好奇,
为什么这段代码能工作:
Html.TextBoxFor(x => x.Age, new { @Value = "0"})但这并不是:
Html.TextBoxFor(x => x.Age, new { @value = "0"})注意@Value中的大写“V”
我知道value是一个关键字,但readonly也是一个关键字,它可以工作。没有必要使用@Readonly (大写字母“R”)。
有人有线索吗?
发布于 2013-01-03 16:21:56
我不是百分之百确定,但是,这可能是value是属性中的关键字,而readonly不是。看看来自MSDN的属性。


发布于 2013-01-03 17:03:53
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"}),它将编译,并且您将在属性字典中获得两个条目,一个是"0",另一个是value,这是x.Age.I,期望输出是一些荒谬的东西,比如<input Value="0" value="..." type="text"/>。发布于 2013-03-07 12:54:36
我的猜测是,MVC代码很难找到Value,因为MS工程师希望您始终使用PascalCase属性名称,因为这是它们的典型约定,PascalCase避免了与非上下文关键字(如class )的冲突。注意PascalCase属性是如何以小写形式呈现的。
原因不是value是关键字,因为它是C#中的上下文关键字,在属性getter和setter中只有特殊的含义(因此在IDE中变成蓝色)。在传递给TextBoxFor的匿名类型中,它没有特殊的意义。
https://stackoverflow.com/questions/14142511
复制相似问题