Asp.net mvc 为什么要添加另一个值属性以及如何删除它?
在razor视图页面中键入以下内容时: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,它根本不会被
@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?