使用Razor,如何将布尔值呈现为JavaScript变量?
如何将布尔值呈现为cshtml文件中的JavaScript变量 目前,这显示了一个语法错误:使用Razor,如何将布尔值呈现为JavaScript变量?,javascript,asp.net-mvc,razor,Javascript,Asp.net Mvc,Razor,如何将布尔值呈现为cshtml文件中的JavaScript变量 目前,这显示了一个语法错误: <script type="text/javascript" > var myViewModel = { isFollowing: @Model.IsFollowing // This is a C# bool }; </script> var myViewModel={ isFollowing:@Model.isFollowing//这是
<script type="text/javascript" >
var myViewModel = {
isFollowing: @Model.IsFollowing // This is a C# bool
};
</script>
var myViewModel={
isFollowing:@Model.isFollowing//这是一个C#bool
};
你问为什么True
而不是True
。。。好问题:JSON布尔值必须为小写 因此,请尝试此操作(并确保在该行上有
/
注释):
或者(注意:您需要使用名称空间System.Xml
):
您还可以尝试:
isFollowing: '@(Model.IsFollowing)' === '@true'
更好的方法是使用:
isFollowing: @Json.Encode(Model.IsFollowing)
这是另一个可以考虑的选项,使用!!!转换为布尔值
isFollowing: !!(@Model.IsFollowing ? 1 : 0)
这将在客户端生成以下内容,其中1转换为true,0转换为false
isFollowing: !!(1) -- or !!(0)
因为搜索把我带到了这里:在ASP.NET核心中,
IJsonHelper
没有Encode()
方法。相反,请使用Serialize()
。例如:
isFollowing: @Json.Serialize(Model.IsFollowing)
更易于阅读的解决方案是:
isFollowing: @(Model.IsFollowing ? "true" : "false")
毫无疑问,
@Model.following
的编码是否真的有效?或者它依赖于这样一个事实,因为它恰好是布尔的?@Model.IsFollowing是razor语法,而不是js@gahooa,不,不是,它是用Razor引擎在服务器上解析的。@Nikos,然后再试:@(Model.IsFollowing)
@Nikos,你试过运行它吗?很多时候这只是VisualStudio的问题,但它运行得非常好。试着运行它!@不是有效的JS运算符。这意味着,它只能在字符串中出现。这个问题让我觉得自己老了。我不知道t是什么,所以我想这是指C#@Nikos;)你的评论毫无意义。这首曲子真的撞到了代表@Json。Encode(Model.IsFollowing)
是最优雅的解决方案。非常感谢。通常会有不止一个布尔值被使用,在这种情况下,编码整个模型会使事情变得很好并且易于使用。例如:var model=@Html.Raw(Json.Encode(model));然后,您可以直接调用model.IsFollowing(抱歉,我不知道如何正确设置注释代码的格式)使用System.Web.Helpers添加@以完成代码。轻微更正@(Model.IsFollowing?1:0)非常有效。ToString()方法可能是最有效的方法。使用“@Model.IsFollowing.ToString().ToLowerInvariant()”必须更高效、更简单。使用该方法,字符串和下限绝对是我选项中最干净的,因为它在javascript中读起来很好。感谢您提及asp.net core!
isFollowing: !!(1) -- or !!(0)
isFollowing: @Json.Serialize(Model.IsFollowing)
isFollowing: @(Model.IsFollowing ? "true" : "false")