ASP.NET MVC 5为隐藏输入呈现不同的bool值

Jas*_*ans 29 asp.net-mvc asp.net-mvc-5

给定以下viewmodel:

public class FooViewModel
{
    public bool IsBoolValue { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

而这个观点:

<input type="hidden" id="Whatever" data-something="@Model.IsBoolValue" value="@Model.IsBoolValue" />
Run Code Online (Sandbox Code Playgroud)

隐藏输入字段的输出是这样的:

<input type="hidden" id="Whatever" data-something="True" value="value">

为什么value属性没有设置True,但data-something属性是?

MVC 5是否会发生变化,因为在我的MVC 4应用程序中,这个问题不会发生.

Jas*_*ans 38

我想我已经明白了.

我相信Razor viewengine正在遵循设置布尔属性的HTML 5方法,如下所述:

当属性是布尔属性时,HTML 5中的含义是什么?

在HTML 5中,bool属性设置如下:

<input readonly />

要么

<input readonly="readonly" />

因此,Razor viewengine将获取模型的bool值,并且value如果Model.IsBoolValue是,将呈现(在我的情况下)属性true.否则,如果是,则根本不呈现falsevalue属性.

编辑:

正如Zabavsky在评论中所提到的,强制True或False的值出现在valueattrbiute中,简单使用ToString():

<input type="hidden" value="@Model.BoolProperty.ToString()" />

  • 我认为值得一提的是,对此的解决方案只是在属性上调用`ToString()`:`value ="@ Model.IsBoolValue.ToString()"`. (11认同)