2009-03-17 1 views
14

Ich übergebe einen booleschen Wert an eine JavaScript-Funktion in meiner .net mvc-Aktionsseite.Übergabe eines booleschen Werts in meiner .net MVC-Ansicht an ein JavaScript, aber JS akzeptiert kein True, will true

Problem ist, es gibt den Wert True aus und Javascript akzeptiert anscheinend nur 'wahr' (in Kleinbuchstaben).

Ich möchte nicht die Variable hacken und machen Sie eine Zeichenfolge und konvertieren Sie es in Kleinbuchstaben in meiner Aktion, aber es sieht so aus, als hätte ich keine Wahl?

Antwort

18

Wenn Sie die Methode ToString() auf einem .NET boolean verwenden Sie den Wert auf Javascript zu senden, versuchen Sie es mit etwas zu ersetzen, wie

(myBoolean ? "true" : "false") 

, so dass es auf Javascript als die entsprechende Zeichenfolge gesendet wird Darstellung des erforderlichen Bool-Wertes.

EDIT: Beachten Sie den Unterschied zwischen:

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

und

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

Im ersten Beispiel, Sie am Ende mit:

var myBoolean = false; 

und das ist eine wörtliche Boolean falsch. In dem zweiten, Sie am Ende mit:

var myBoolean = 'false'; 

und in JavaScript, ‚false‘ ist eine nicht-leere Zeichenkette und folglich, wenn in einem Booleschen Kontext ausgewertet, wird es wahr sein. Nun, wahrhaftig. :)

+0

eigentlich 1 ist nicht wahr in Javascript, aber 0 ist falsch. – mrblah

+0

Bin ich richtig oder ist 1 auch wahr, ich denke, w3schools könnte falsch sein, da es keinen Sinn ergibt hehe. – mrblah

+0

1 ist echt, z.if (1) {alert ("wird passieren");} aber if (1 === true) {alert ("wird nie passieren");} – svinto

0

Sie wollen diese verwenden:

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

+1

Bitte sagen Sie mir, dass diese Namespace-Überlastung ein Witz ist. –

+0

Im Allgemeinen verwenden Sie den JSON-Serializer System.Runtime.Serialization.Json.DataContractJsonSerializer aber JavaScriptSerializer ist immer noch da, wo Sie für einfache direkte Typ-Serialisierungen verwenden können. http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx –

1

können Sie die JavaScript-Methode verwenden Boolean()

if (Boolean(value)) {} 
+1

Boolean ("false") ist wahr, nicht falsch. –

+0

Dies funktioniert nicht: Boolean (@ Model.MyBool) gibt Ihnen Boolean (True) oder Boolean (False), die beide einen Fehler geben, dass True oder False nicht definiert ist. – ctb

5

Ich habe eine Erweiterungsmethode erstellt, um sie in jeder booleschen Eigenschaft eines Modells zu verwenden.

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

Jetzt in einer Ansicht kann ich einfach nutzen:

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

+1 Ich würde es etwas kürzer wie "ToJS" nennen, aber es ist besser als die Ansichten mit "verschmutzen"? "true": "false" ' –

3

, wenn Sie dies oft tun müssen, fügen Sie einfach diese an die Spitze des Javascript (oder Ihre js Bibliotheksdatei, etc.)

var True = true; False = false; 

in einem einfachen Fall aus Verwendung:

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

Für mich funktioniert dieser Ansatz (MVC4)

<script type="text/javascript"> 

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

</script> 
+1

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

Verwandte Themen