使用Razor,如何将布尔值呈现给JavaScript变量?


144

如何在CSHTML文件中的JavaScript变量中呈现布尔值?

目前,这显示出语法错误:

<script type="text/javascript" >

    var myViewModel = {
        isFollowing: @Model.IsFollowing  // This is a C# bool
    };
</script>

@不是有效的JS运算符。这意味着,它只能在字符串中出现
Ivan Kuckir 2013年

这个问题让我觉得老了
Nikos's

我不知道T#是什么,所以我认为这意味着C#@Nikos;)
Mafii

您的评论没有道理
Nikos

哇,这个Qu真的让众议员感到震惊
Nikos

Answers:


298

您可能还想尝试:

isFollowing: '@(Model.IsFollowing)' === '@true'

更好的方法是使用:

isFollowing: @Json.Encode(Model.IsFollowing)

63
@Json.Encode(Model.IsFollowing)是恕我直言,最优雅的解决方案。谢谢!
Sandro

2
通常情况下,会使用多个布尔值,在这种情况下,对整个模型进行编码将使以后的事情变得更好且易于使用。例如: var model = @ Html.Raw(Json.Encode(Model)); 然后您可以调用model.IsFollowing (对不起,我不知道如何正确设置注释代码的格式)
Jynn

添加@using System.Web.Helpers以完成代码。
taylorswiftfan

29

JSON布尔值必须为小写。

因此,请尝试以下操作(并确保//在行上添加nto 注释):

var myViewModel = {
    isFollowing: @Model.IsFollowing.ToString().ToLower()
};

或(注意:您需要使用命名空间System.Xml):

var myViewModel = {
    isFollowing: @XmlConvert.ToString(Model.IsFollowing)
};

1
.ToString()方法可能是最有效的方法。使用'@ Model.IsFollowing.ToString()。ToLowerInvariant()'必须更加高效,并且更加直接。
XDS

使用该方法,字符串化和降低化绝对是我选择的最干净的方法,因为它在javascript中读起来很好。
Frank Thomas

28

因为搜索将我带到了这里:在ASP.NET Core中,IJsonHelper没有Encode()方法。而是使用Serialize()。例如:

isFollowing: @Json.Serialize(Model.IsFollowing)    

3
感谢您提及asp.net核心!
谢里夫·马蒙

13
var myViewModel = {
    isFollowing: '@(Model.IsFollowing)' == "True";
};

为什么Truetrue问...好问题:
为什么Boolean.ToString输出“ True”而不是“ true”


不用怀疑,但是@Model.IsFollowing实际上有效的JS语法的编码是吗?还是基于事实,那就是因为它恰好是布尔值?
gahooa

@ Model.IsFollowing是剃刀语法,而不是js
Nikos

@gahooa,不,不是这样,它是使用Razor引擎在服务器上解析的。
gdoron在2013年

@Nikos,然后尝试:'@(Model.IsFollowing)'
gdoron支持Monica

@Nikos,您尝试运行它吗?很多时候,这只是Visual Studio问题,但运行得很好。尝试运行它!
gdoron在2013年

4

这是要考虑的另一种选择,使用!! 转换为布尔值。

isFollowing: !!(@Model.IsFollowing ? 1 : 0)

这将在客户端生成以下内容,其中1转换为true,0转换为false。

isFollowing: !!(1)  -- or !!(0)

较小的校正!! @(Model.IsFollowing?1:0)效果很好

3

一个更容易阅读的解决方案是这样做:

isFollowing: @(Model.IsFollowing ? "true" : "false")
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.