2010-11-17 9 views
17

Masz problem osadzania C# kod javascript wewnątrz bloku z MVC3 RC1 widokiem maszynki. Jakiej składni powinienem użyć, aby to zadziałało? Otrzymuję ostrzeżenia np. Oczekiwana stała na zmiennej isOk między innymi. (Bez znacznika tekstu, poniższy kod nie jest rozpoznawana jako JavaScript)Asp.Net MVC3 RC Razor odsłony: składnia do osadzania kodu wewnątrz bloku <javascript>

@{bool isOk = true;} 

<script type="text/javascript"> 
    var tmp1 = ""; 
    @if (isOk) 
    { 
     <text> 
      var tmp=""; // this should be interpreted as javascript 
     </text>  
    } 
</script> 

Odpowiedz

26

Trzeba tag <text> się wskazywać, że zawartość nie jest oceniana na serwerze. Na przykład:

@{ 
    var isOK = true; 
} 

<script type="text/javascript"> 
    var tmp1 = ""; 
    @if (isOK) 
    { 
     <text> 
      var tmp = "foo"; 
     </text>  
    } 
</script> 

wyjście będzie w powstałej stronie:

<script type="text/javascript"> 
    var tmp1 = ""; 
    var tmp = "foo"; 
</script> 

Jeśli chodzi o ostrzeżenie Expected Constant obawia się, dobrze, Razor Intellisense jest jeszcze w fazie beta, więc jest to dalekie od doskonałości. To tylko ostrzeżenie, które możesz spokojnie zignorować. Ważne jest to, że aplikacja działa i emituje prawidłowy kod HTML. Mam nadzieję, że to jest coś, co zostanie naprawione w produkcie końcowym. Z własnego doświadczenia jedynymi ostrzeżeniami, którym ufam, są te, które są wysyłane przez kompilator C#. Kiedy pracuję w widoku, bezpiecznie zignoruję wszystkie brzydkie ostrzeżenia emitowane przez Visual Studio, ponieważ wiem, że jest ono błędne.

+0

Masz rację, w tym przypadku ostrzeżenia Parsery powinny być ignorowane. Wynik jest taki, jaki powinien być ... dzięki. – rekna

+0

Niestety, ostrzeżenia są nadal tutaj w MVC 3 (wersja ostateczna). – cheeesus

9

Alternatywnym (bardziej zwięzły i łatwiejsze do odczytania IMO) jest uciec z powrotem do tekstu w następujący sposób:

<script type="text/javascript"> 
    var tmp1 = ""; 
    @if (isOK) 
    { 
     @:var tmp = "foo"; 
    } 
</script> 
+0

Prawda w tym przypadku, ale w bloku wieloliniowym prawdopodobnie wyglądałaby o wiele ładniej –

Powiązane problemy