164

cshtml ファイルの JavaScript 変数にブール値をレンダリングするにはどうすればよいですか?

現在、これは構文エラーを示しています。

<script type="text/javascript" >

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

7 に答える 7

338

次のことも試してみてください。

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

さらに良い方法は、次を使用することです。

isFollowing: @Json.Encode(Model.IsFollowing)
于 2013-12-06T09:19:58.960 に答える
30

JSON ブール値は小文字にする必要があります。

//したがって、これを試してください(そして、行にコメントがあることを確認してください):

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

または (注: 名前空間を使用する必要がありますSystem.Xml):

var myViewModel = {
    isFollowing: @XmlConvert.ToString(Model.IsFollowing)
};
于 2013-01-21T23:27:48.553 に答える
15
var myViewModel = {
    isFollowing: '@(Model.IsFollowing)' == "True";
};

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

于 2013-01-21T22:48:27.173 に答える
7

読みやすい解決策は、これを行うことです。

isFollowing: @(Model.IsFollowing ? "true" : "false")
于 2019-08-27T09:00:00.883 に答える
0

変換操作を定義し、オーバーライドを追加すると.ToString()、多くの作業を節約できます。

プロジェクトでこれを定義structします。

/// <summary>
/// A <see cref="bool"/> made for use in creating Razor pages.
/// When converted to a string, it returns "true" or "false".
/// </summary>
public struct JSBool
{
    private readonly bool _Data;

    /// <summary>
    /// While this creates a new JSBool, you can also implicitly convert between the two.
    /// </summary>
    public JSBool(bool b)
    {
        _Data = b;
    }

    public static implicit operator bool(JSBool j) => j._Data;
    public static implicit operator JSBool(bool b) => new JSBool(b);

    // Returns "true" or "false" as you would expect
    public override string ToString() => _Data.ToString().ToLowerInvariant();
}

使用法

bool質問の場合のように、C# を直接キャストできます。

{
    // Results in `isFollowing : true`
    isFollowing : @((JSBool)Model.IsFollowing)
}

ただし、追加の作業を行うことなく、JSBoolRazor コードで a を直接使用することもできます。truefalse

@{
    JSBool isA = true;
    JSBool isB = false;
    // Standard boolean operations work too:
    JSBool isC = a || b;
}

<script>
    if (@isC)
        console.log('true');
</script>

これは、上で定義した暗黙の変換演算子のために機能します。


Razor コードで使用する場合にのみ、これを使用するようにしてください。つまり、コードが乱雑になる可能性があるため、通常の C# では使用しないでください。

于 2021-12-10T15:06:30.403 に答える