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é.