Asp.net mvc 为什么要添加另一个值属性以及如何删除它?

Asp.net mvc 为什么要添加另一个值属性以及如何删除它?,asp.net-mvc,razor,asp.net-mvc-4,Asp.net Mvc,Razor,Asp.net Mvc 4,在razor视图页面中键入以下内容时: @Html.TextBoxFor(m => m.Name, new {@Value="Default Value", @Class = "CSSRadwan" }) 它翻译成如下: <input Class="CSSRadwan" Value="Default Value" id="Name" name="Name" type="text" value="" /> 如果我用@Value(小“v”)更改@Value,它根本不会被

在razor视图页面中键入以下内容时:

 @Html.TextBoxFor(m => m.Name, new {@Value="Default Value", @Class = "CSSRadwan" })
它翻译成如下:

 <input Class="CSSRadwan" Value="Default Value" id="Name" name="Name" type="text" value="" />

如果我用@Value(小“v”)更改@Value,它根本不会被转换

我的问题是:

为什么还有另一个名为“value”的属性是空的?如何删除它

为什么“Value”属性中的字符“V”是大写的,而另一个是小的?如果我希望第一个字符也像普通属性一样小,怎么办

我使用的是MVC4.0和Visual Studio 2012 Update 1。

HTML输入元素的“value”属性表示要发布的值,如果显式设置,则表示默认值。正如gustavodidomenico所指出的,TextBoxFor辅助对象用于显示模型中的值,这就是渲染属性的原因。如果不希望呈现值属性,请改用TextBox辅助对象。这是适合您需求的正确工具

value属性有大写字母“V”的原因是在匿名对象的属性名上指定了一个大写字母。“阶级”也是如此。将属性名称更改为以小写字母开头:

new { @class = "CSSRadwan", @value = "Default Value" }
为什么还有另一个属性叫做“值”

如果您查看一下MVC的源代码,您将看到在中,
value
属性将始终由框架设置,因为方法
InputHelper
中有以下行:

tagBuilder.MergeAttribute("value", attemptedValue ?? ((useViewData) ? htmlHelper.EvalString(fullName, format) : valueParameter), isExplicitValue);
使用
TextBoxFor
时,
isExplicitValue
true
,因此
value
属性将覆盖名为
value
的任何现有html属性。这解释了为什么不能在
TextBoxFor
中使用
new{@value=“My value”}

。。。它是空的

因为m.Name最初没有值

如何删除它

您不能删除
,如上所示

为什么“Value”属性中的字符“V”是大写的,而另一个是小的?如果我希望第一个字符也像普通属性一样小,怎么办

它必须是
Value
中的大写V,以区分它与小写
Value
的区别,因此它不会被框架覆盖,如上所述。实际上,您将获得如下输出:

<input Value="Default Value" value="" id="Name" name="Name" type="text" />


由于在html中,
Value
出现在
Value
之前,浏览器将在文本框中呈现并显示“默认值”。

我认为,如果使用TextBoxFor,则隐式地希望在文本输入中显示模型属性值。否则你可以用文本框。谢谢你的评论,但我想用文本框,因为我认为古斯托夫是对的。如果你开始使用错误的工具,那么不要惊讶它会产生奇怪的结果。你可以用默认值预先填充模型名称值我在做一些研究。我认为这是不可能的。也许你应该创建一个编辑器模板:)也许这个问题是重复的:谢谢你的回答,但是如果你尝试你提供的代码,你会发现它不起作用,我已经在问题“如果我用(小“v”)更改@Value,它根本不会被翻译。”您是否尝试过将代码段应用到TextBox而不是TextBoxFor?