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

IT技术 javascript asp.net-mvc razor
2021-03-07 14:06:25

如何在 cshtml 文件中将布尔值呈现给 JavaScript 变量?

目前这显示了一个语法错误:

<script type="text/javascript" >

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

您可能还想尝试:

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

更好的方法是使用:

isFollowing: @Json.Encode(Model.IsFollowing)
@Json.Encode(Model.IsFollowing)恕我直言是最优雅的解决方案。谢谢!
2021-04-27 14:06:25
通常会使用多个布尔值,在这种情况下,对整个模型进行编码会使之后的事情变得很好且易于使用。例如: var model = @Html.Raw(Json.Encode(Model)); 然后你可以调用model.IsFollowing (抱歉我不知道如何正确格式化注释代码)
2021-04-30 14:06:25
添加@using System.Web.Helpers完成代码。
2021-05-18 14:06:25

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

isFollowing: @Json.Serialize(Model.IsFollowing)    
感谢您提到asp.net core!
2021-04-26 14:06:25

JSON 布尔值必须是小写的。

因此,试试这个(并确保没有//注释就行):

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

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

var myViewModel = {
    isFollowing: @XmlConvert.ToString(Model.IsFollowing)
};
.ToString() 方法可能是最有效的方法。使用 '@Model.IsFollowing.ToString().ToLowerInvariant()' 必须更高效,更直接。
2021-04-26 14:06:25
使用该方法,字符串和降低绝对是我选择中最干净的方法,因为它在 javascript 中读取得很好。
2021-05-15 14:06:25
var myViewModel = {
    isFollowing: '@(Model.IsFollowing)' == "True";
};

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

@Model.IsFollowing 是剃刀语法,而不是 js
2021-04-24 14:06:25
@Nikos,你试过运行它吗?很多时候这只是 Visual Studio 的问题,但它运行得非常好。尝试运行它!
2021-05-04 14:06:25
@gahooa,不,不是,它是在服务器上使用 Razor 引擎解析的。
2021-05-05 14:06:25
@Nikos,然后尝试: '@(Model.IsFollowing)'
2021-05-07 14:06:25
不是质疑它,而是@Model.IsFollowing实际有效的 JS 语法的编码或者它是否依赖于它会是因为它恰好是布尔值的事实?
2021-05-14 14:06:25

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

isFollowing: @(Model.IsFollowing ? "true" : "false")