当我在剃刀视图页面中键入以下内容时:
@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.
答案 0 :(得分:1)
为什么还有另一个名为“value”的属性......
如果你看一下MVC的源代码,你会发现在System.Web.Mvc.Html.InputExtensions.cs中,value
属性将总是由框架设置,因为方法InputHelper
中的以下行:
tagBuilder.MergeAttribute("value", attemptedValue ?? ((useViewData) ? htmlHelper.EvalString(fullName, format) : valueParameter), isExplicitValue);
使用TextBoxFor
时,isExplicitValue
为true
,value
属性将覆盖任何名为value
的现有html属性。这解释了为什么您无法在new { @value="My value" }
中使用TextBoxFor
。
......它是空的?
因为m.Name最初没有值。
如何删除它?
如上所示,您无法移除value
。
为什么“Value”属性中的字符“V”是大写,而另一个很小,如果我想让第一个像普通属性一样小,怎么做呢?
必须是Value
中的大写V才能将其与小写value
区分开来,因此不会被框架覆盖,如上所述。实际上,您将获得如下输出:
<input Value="Default Value" value="" id="Name" name="Name" type="text" />
由于Value
出现在html中的value
之前,“默认值”将被渲染并显示在浏览器的文本框中。
答案 1 :(得分:0)
HTML input元素的“value”属性表示要发布的值,如果显式设置,则表示默认值。 TextBoxFor帮助器设计用于显示模型中的值,如gustavodidomenico指出的那样,这就是呈现属性的原因。如果您不想呈现value属性,请改用TextBox助手。这是满足您要求的正确工具。
您的value属性具有大写“V”的原因是您在匿名对象的属性名称上指定了一个。 “Class”也是如此。将属性名称更改为以小写字母开头:
new { @class = "CSSRadwan", @value = "Default Value" }