2010-11-17 9 views
17

Problemi con l'incorporamento del codice C# all'interno di un blocco javascript con MVC3 RC1 visualizzazione rasoio. Quale sintassi dovrei usare per farlo funzionare? Ottengo avvertenze per es. Costante prevista tra le variabili isOk. (Senza modifica del testo, il seguente codice non viene riconosciuto come JavaScript)Asp.Net MVC3 RC Viste del rasoio: sintassi per l'incorporamento del codice all'interno del blocco <javascript>

@{bool isOk = true;} 

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

risposta

26

è necessario il tag <text> per indicare che il contenuto non viene valutato sul server. Per esempio:

@{ 
    var isOK = true; 
} 

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

uscita volontà nella pagina risultante:

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

Per quanto riguarda l'avviso Expected Constant è interessato, ben, Razor Intellisense è ancora in beta quindi è ben lungi dall'essere perfetto. È solo un avvertimento che puoi tranquillamente ignorare. L'importante è che l'applicazione funzioni e che emetta un codice HTML valido. Spero che questo sia qualcosa che verrà risolto nel prodotto finale. Dall'esperienza personale gli unici avvertimenti di cui mi fido sono quelli emessi dal compilatore C#. Quando lavoro in una vista ignora tranquillamente tutti gli avvertimenti di merda che Visual Studio emette perché so che è sbagliato.

+0

Hai ragione, in questo caso dovrebbe essere ignorato gli avvertimenti parser. L'output è quello che dovrebbe essere ... grazie. – rekna

+0

Sfortunatamente, gli avvertimenti sono ancora qui in MVC 3 (versione finale). – cheeesus

9

Un'alternativa (più concisa e più facile da leggere IMO) è quello di fuggire di nuovo fuori per come segue:

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

Vero in questo caso, ma in un blocco multilinea sarebbe probabilmente molto più ordinato –

Problemi correlati