2012-08-31 97 views
5

Quiero comparar un valor booleano de Viewbag en javascript. Así que al principio intentado esto:¿Cómo puedo comparar un valor de C# Viewbag en Javascript?

if (@Viewbag.MyBoolValue) 
    do_sth(); 

Pero luego tengo error en la consola como: Value False/True is not declared (no exactamente).

así que he intentado esto:

@{ 
    string myBool = ((bool)Viewbag.MyBoolValue) ? "true" : "false"; 
} 

y en javascript:

if (@myBool == "true") 
    do_sth(); 

Pero esto no funciona demasiado. ¿Cómo puedo hacer que funcione? Cualquier ayuda sería apreciada.

+0

Nota al margen: Si estaba realmente intentando utilizar una cadena de C# en JavaScript, se usaría ' 'o' @ myString'' "@myString"'. El valor se arroja literalmente sin tipear (obviamente). – Sinjai

Respuesta

15

Lo que debe funcionar, suponiendo que el valor de ViewBag es de un tipo que javascript puede entender.

Sin embargo, tenga en cuenta que su primer ejemplo probablemente no funcionó porque los valores booleanos son minúsculas en javascript y mayúsculas en C#. Con esto en mente, intente esto:

var myBoolValue = @Viewbag.MyBoolValue.ToString().ToLower(); 
if (myBoolValue) 
    do_sth(); 
+0

Viewbag podría ser sensible a mayúsculas y minúsculas: ViewBag –

0

La continuación va a crear un javascript vailable con valor de viewbag

<script> 
    var myBoolInJs = @Viewbag.MyBoolValue; 
    if(myBoolInJs == true) 
    do_sth(); 
</script> 
+0

Da error porque 'Raw' toma la cadena como parámetro. –

+0

@MateuszRogulski lo siento, es malo, no necesitas el HtmlRaw, lo escribí demasiado rápido – HatSoft

0

Esto funcionará.

@{  
    string myBool = Viewbag.MyBoolValue.ToString().ToLower(); 
} 

if (@myBool) 
    do_sth(); 
0

Insted uso verdadero y falso 0 y 1 en su controlador, en la parte superior de la página de afeitar

@{ 
    var isSomething= Viewbag.MyBoolValue; 
} 

más adelante en

if (@isSomething== 0) 
0
var myBoolVal = @((ViewBag.MyBoolValue ?? false).ToString().ToLower()); 

o

var myBoolVal = '@(ViewBag.MyBoolValue)'==='@true'; 

o

var myBoolVal = @(Json.Encode(ViewBag.MyBoolValue ?? false)); 
Cuestiones relacionadas