使用Razor,如何为JavaScript变量渲染布尔值?

Nik*_*kos 133 javascript asp.net-mvc razor

如何在cshtml文件中为J2变量渲染布尔值?

目前,这显示语法错误:

<script type="text/javascript" >

    var myViewModel = {
        isFollowing: @Model.IsFollowing  // This is a C# bool
    };
</script>
Run Code Online (Sandbox Code Playgroud)

ano*_*ser 277

您可能还想尝试:

isFollowing: '@(Model.IsFollowing)' === '@true'
Run Code Online (Sandbox Code Playgroud)

并且更好的方法是使用:

isFollowing: @Json.Encode(Model.IsFollowing)
Run Code Online (Sandbox Code Playgroud)

  • `@Json.Encode(Model.IsFollowing)`是最优雅的解决方案.谢谢! (61认同)
  • 通常情况下,会使用多个布尔值,在这种情况下,对整个模型进行编码将使以后的事情变得简单好用。例如:** var model = @ Html.Raw(Json.Encode(Model)); **,然后您可以调用* model.IsFollowing *(对不起,我不知道如何正确设置注释代码的格式) (2认同)
  • 添加“@using System.Web.Helpers”来完成代码。 (2认同)

Luc*_*ero 25

JSON布尔值必须小写.

因此,试试这个(并确保nto //在该行上有评论):

var myViewModel = {
    isFollowing: @Model.IsFollowing.ToString().ToLower()
};
Run Code Online (Sandbox Code Playgroud)

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

var myViewModel = {
    isFollowing: @XmlConvert.ToString(Model.IsFollowing)
};
Run Code Online (Sandbox Code Playgroud)


Mar*_* L. 20

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

isFollowing: @Json.Serialize(Model.IsFollowing)    
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你提到asp.net核心! (3认同)

gdo*_*ica 12

var myViewModel = {
    isFollowing: '@(Model.IsFollowing)' == "True";
};
Run Code Online (Sandbox Code Playgroud)

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


Stu*_*ows 6

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

isFollowing: !!(@Model.IsFollowing ? 1 : 0)
Run Code Online (Sandbox Code Playgroud)

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

isFollowing: !!(1)  -- or !!(0)
Run Code Online (Sandbox Code Playgroud)


小智 5

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

isFollowing: @(Model.IsFollowing ? "true" : "false")
Run Code Online (Sandbox Code Playgroud)