cshtml ファイルの JavaScript 変数にブール値をレンダリングするにはどうすればよいですか?
現在、これは構文エラーを示しています。
<script type="text/javascript" >
var myViewModel = {
isFollowing: @Model.IsFollowing // This is a C# bool
};
</script>
cshtml ファイルの JavaScript 変数にブール値をレンダリングするにはどうすればよいですか?
現在、これは構文エラーを示しています。
<script type="text/javascript" >
var myViewModel = {
isFollowing: @Model.IsFollowing // This is a C# bool
};
</script>
次のことも試してみてください。
isFollowing: '@(Model.IsFollowing)' === '@true'
さらに良い方法は、次を使用することです。
isFollowing: @Json.Encode(Model.IsFollowing)
JSON ブール値は小文字にする必要があります。
//
したがって、これを試してください(そして、行にコメントがあることを確認してください):
var myViewModel = {
isFollowing: @Model.IsFollowing.ToString().ToLower()
};
または (注: 名前空間を使用する必要がありますSystem.Xml
):
var myViewModel = {
isFollowing: @XmlConvert.ToString(Model.IsFollowing)
};
var myViewModel = {
isFollowing: '@(Model.IsFollowing)' == "True";
};
なぜTrue
、true
あなたは尋ねないのですか...良い質問:
なぜBoolean.ToStringは「true」ではなく「True」を出力するのですか?
読みやすい解決策は、これを行うことです。
isFollowing: @(Model.IsFollowing ? "true" : "false")
変換操作を定義し、オーバーライドを追加すると.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)
}
ただし、追加の作業を行うことなく、JSBool
Razor コードで a を直接使用することもできます。true
false
@{
JSBool isA = true;
JSBool isB = false;
// Standard boolean operations work too:
JSBool isC = a || b;
}
<script>
if (@isC)
console.log('true');
</script>
これは、上で定義した暗黙の変換演算子のために機能します。
Razor コードで使用する場合にのみ、これを使用するようにしてください。つまり、コードが乱雑になる可能性があるため、通常の C# では使用しないでください。