168 votes

Avec Razor, comment rendre un booléen dans une variable JavaScript ?

Comment rendre un booléen à une variable JavaScript dans un fichier cshtml ?

Actuellement, cela montre une erreur de syntaxe :

<script type="text/javascript" >

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

5voto

Stuart Hallows Points 766

Voici une autre option à envisager, en utilisant la conversion ! ! en booléen.

isFollowing: !!(@Model.IsFollowing ? 1 : 0)

Cela générera ce qui suit du côté client, 1 étant converti en vrai et 0 en faux.

isFollowing: !!(1)  -- or !!(0)

0voto

Calculuswhiz Points 3246

Définition d'une opération de conversion et en ajoutant une surcharge de .ToString() peut économiser beaucoup de travail.

Définissez ceci struct dans votre projet :

/// <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();
}

Utilisation

Vous pouvez directement convertir un fichier C# bool comme dans le cas de la question :

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

Mais vous pouvez également utiliser un JSBool directement dans le code Razor avec l'espoir que cela donnera true y false sans avoir à faire de travail supplémentaire :

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

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

Cela fonctionne grâce aux opérateurs de conversion implicites que nous avons définis ci-dessus.


Veillez simplement à ne l'utiliser que lorsque vous avez l'intention de l'utiliser en code Razor. En d'autres termes, ne l'utilisez pas avec du C# normal, car cela peut rendre votre code désordonné.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X