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

T#が何なのかわからないので、これはC#@ニコスを意味するものだと思いました;)
Mafii

コメントが意味をなさない
Nikos

このQuは本当に担当者を激突させました
Nikos

回答:


298

あなたも試してみたいかもしれません:

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

そしてさらに良い方法は次のようにすることです:

isFollowing: @Json.Encode(Model.IsFollowing)

63
@Json.Encode(Model.IsFollowing)imhoは最もエレガントなソリューションです。ありがとうございました!
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 2017

メソッドを使用して、文字列に変換して下げることは、javascriptでうまく読み取るため、私のオプションでは間違いなく最もクリーンです。
フランクトーマス

28

検索が私をここにもたらしたので:ASP.NET CoreではIJsonHelperEncode()メソッドはありません。代わりに、を使用してくださいSerialize()。例えば:

isFollowing: @Json.Serialize(Model.IsFollowing)    

3
asp.netコアについて言及していただきありがとうございます。
Sharif Mamun

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

なぜあなたは尋ねTrueないのtrueか...良い質問:なぜBoolean.ToStringは「true」ではなく「true」を出力するのです


疑いの余地はありませんが、@Model.IsFollowing実際に有効なJS構文のエンコーディングですか?それとも、それがたまたまブール値であることが原因であるという事実に依存していますか?
gahooa 2013年

@ Model.IsFollowingは、jsではなくかみそりの構文です
Nikos

@gahooa、そうではありません。Razorエンジンを備えたサーバーで解析されます。
gdoronは2013

@Nikos、その後、試してください:'@(Model.IsFollowing)'
gdoronがモニカ支援している

@ニコス、あなたはそれを実行しようとしましたか?多くの場合、それは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")
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.