4

当我在剃刀视图页面中键入以下内容时:

 @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”的属性并且它是空的?如何删除它?

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

我正在使用 MVC4.0 和 Visual Studio 2012 Update 1。

4

2 回答 2

1

为什么还有另一个属性叫做“值”...

如果您查看 MVC 的源代码,您会发现在System.Web.Mvc.Html.InputExtensions.cs中,由于方法中的以下行,该value属性将始终由框架设置InputHelper

tagBuilder.MergeAttribute("value", attemptedValue ?? ((useViewData) ? htmlHelper.EvalString(fullName, format) : valueParameter), isExplicitValue);

使用TextBoxFor, isExplicitValueis时true,该value属性将覆盖任何现有的名为 的 html 属性value。这解释了为什么您不能使用new { @value="My value" }in TextBoxFor

...它是空的?

因为 m.Name 最初没有值。

如何删除它?

value如上所示,您无法删除。

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

它必须是大写的 V inValue才能与小写区分开来,value这样它就不会被框架覆盖,如上所述。实际上,您将获得如下输出:

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

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

于 2013-07-29T10:29:35.923 回答
0

HTML 输入元素的“值”属性表示要发布的值,或者如果显式设置,则表示默认值。正如 gustavodidomenico 指出的那样,TextBoxFor 帮助器旨在显示模型中的值,这就是呈现属性的原因。如果您不希望呈现 value 属性,请改用 TextBox 帮助器。这是满足您要求的正确工具。

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

new { @class = "CSSRadwan", @value = "Default Value" }
于 2013-03-20T13:34:59.397 回答