将.net MVC视图中的布尔值传递给javascript,但JS不接受True,想要为true

mrb*_*lah 14 javascript asp.net-mvc view

我将一个布尔值传递给我的.net mvc操作页面中的javascript函数.

问题是,它输出值True,javascript显然只接受'true'(小写).

我不想破解变量并将其变为字符串并在我的操作中将其转换为小写,但看起来我没有选择?

Dyl*_*tie 18

如果您在.NET布尔值上使用ToString()方法将值发送到Javascript,请尝试将其替换为类似

(myBoolean ? "true" : "false")
Run Code Online (Sandbox Code Playgroud)

这样它就会被发送到Javascript,作为所需bool值的相应字符串表示.

编辑:注意区别:

<script type="text/javascript">
var myBoolean = <%= (myBoolean ? "true" : "false") %>;
</script>
Run Code Online (Sandbox Code Playgroud)

<script type="text/javascript">
var myBoolean = '<%= (myBoolean ? "true" : "false") %>';
</script>
Run Code Online (Sandbox Code Playgroud)

在第一个示例中,您最终得到:

var myBoolean = false;
Run Code Online (Sandbox Code Playgroud)

这是一个文字布尔值false.在第二个,你最终得到:

var myBoolean = 'false';
Run Code Online (Sandbox Code Playgroud)

在JavaScript中,'false'是一个非空字符串,因此如果在布尔上下文中进行求值,它将是真的.嗯,真实的.:)

  • @StephenPrice Javascript中的真实性非常奇怪.Javascript中的每个日期/时间都是正确的,除了1969年12月31日午夜的行程(评估为零,因为JS使用01/01/1970 00:00:00作为纪元)我曾在JS谈话中提到这一点,这位老嬉皮士编号说:"是的,我在那里......新年前夜午夜.阿姆斯特朗已经走过月球,我们只是度过了爱情的夏天,一切看起来都非常精彩和乐观.回首在它上面,它显然是错误的......":) (2认同)

CM *_*tal 5

我创建了一个扩展方法,在模型的任何布尔属性中使用它.

    public static class GeneralExtensions
    {
    public static string GetValueForJS(this bool argValue)
        {
            return argValue ? "true" : "false"; 
        }
     }
Run Code Online (Sandbox Code Playgroud)

现在在视图中我可以简单地使用:

<script type="text/javascript">
    var variable = @Model.IsFoo.GetValueForJS();
</script>
Run Code Online (Sandbox Code Playgroud)