2009-03-17 19 views

Respuesta

18

Si está utilizando el método ToString() en un valor lógico .NET para enviar el valor de Javascript, intente reemplazarlo con algo como

(myBoolean ? "true" : "false") 

para que sea enviado al Javascript como la cadena apropiada representación del valor de bool requerido.

EDIT: Nota la diferencia entre:

<script type="text/javascript"> 
var myBoolean = <%= (myBoolean ? "true" : "false") %>; 
</script> 

y

<script type="text/javascript"> 
var myBoolean = '<%= (myBoolean ? "true" : "false") %>'; 
</script> 

En el primer ejemplo, usted termina con:

var myBoolean = false; 

y eso es un valor booleano literal falso. En el segundo, se termina con:

var myBoolean = 'false'; 

y en JavaScript, 'falso' es una cadena no vacía y por lo tanto si se evalúan en un contexto booleano, que va a ser verdad. Bueno, cierto. :)

+0

realidad 1 no es cierto en javascript, pero 0 es falsa. – mrblah

+0

Estoy en lo correcto o estoy representando 1 verdadero también, creo que w3schools podría estar equivocado ya que no tiene sentido jeje. – mrblah

+0

1 es verdadero, por ej.if (1) {alert ("will happen");} pero if (1 === true) {alert ("nunca ocurrirá");} – svinto

0

que desea utilizar esto:

(.NET 3.5) System.Web.Script.Serialization.JavaScriptSerializer.Serialize

+1

Por favor, dime que esta sobrecarga del espacio de nombres es una broma. –

+0

en general, utiliza el serializador JSON System.Runtime.Serialization.Json.DataContractJsonSerializer pero JavaScriptSerializer aún se puede utilizar para serializaciones de tipo directo simples. http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx –

1

Se puede utilizar el método de Javascript Boolean()

if (Boolean(value)) {} 
+1

Boolean ("false") es verdadero, no es falso. –

+0

Esto no funciona: Boolean (@ Model.MyBool) le dará Boolean (True) o Boolean (False), los cuales le darán un error que True o False no está definido. – ctb

5

Creé un método de extensión para usarlo en cualquier propiedad booleana de un Modelo.

public static class GeneralExtensions 
    { 
    public static string GetValueForJS(this bool argValue) 
     { 
      return argValue ? "true" : "false"; 
     } 
    } 

ahora en una vista simplemente puedo usar:

<script type="text/javascript"> 
    var variable = @Model.IsFoo.GetValueForJS(); 
</script> 
+0

+1 Lo llamaría algo más corto como "ToJS", pero es mejor que contaminar las vistas con '? "true": "false" ' –

3

si necesita hacer esto a menudo, sólo tiene que añadir esto a la parte superior del Javascript (o sus js archivo de biblioteca, etc.)

var True = true; False = false; 

en un simple caso de uso:

var x = ('<%= boolValue %>'=='True'); 
0

Para mí, este enfoque funciona (MVC4)

<script type="text/javascript"> 

if (@{if (Model.IsSubmitted) { @Html.Raw("true"); } else { @Html.Raw("false"); } } == true) 
{ 
// code 
} 

</script> 
+1

O simplemente' if (@ Html.Raw (Model.IsSubmitted? "true": "false")) ' –

Cuestiones relacionadas