给出以下viewmodel:
public class FooViewModel
{
public bool IsBoolValue { get; set; }
}
和这个观点:
<input type="hidden" id="Whatever" data-something="@Model.IsBoolValue" value="@Model.IsBoolValue" />
隐藏输入字段的输出为:
<input type="hidden" id="Whatever" data-something="True" value="value">
为什么value
属性未设置为True
,但data-something
属性是?
MVC 5是否会发生变化,因为在我的MVC 4应用中,这个问题不会发生。
答案 0 :(得分:33)
我想我已经明白了。
我相信Razor viewengine正在遵循HTML 5设置布尔属性的方式,如下所述:
What does it mean in HTML 5 when an attribute is a boolean attribute?
在HTML 5中,bool属性设置如下:
<input readonly />
或
<input readonly="readonly" />
因此Razor viewengine会获取模型的bool值,如果value
为Model.IsBoolValue
,则会呈现(在我的情况下)true
属性。否则,如果它是false
,则根本不会呈现value
属性。
编辑:
正如评论中提到的Zabavsky,要强制True或False的值出现在value
attrbiute,简单使用ToString()
:
<input type="hidden" value="@Model.BoolProperty.ToString()" />