Razor Sintassi e Javascript
-
27-09-2019 - |
Domanda
Come prova che sto convertendo un'applicazione proof-of-concept che abbiamo scritto da Web Forms a Razor, semplicemente in modo che possiamo valutarlo.
ho incontrato un problema finora che sta facendo la mia testa hurt..generating JavaScript lato client ...
Web-Forms
<script type="text/javascript">
var jqGridIdList = "<%: Url.Action ("getidlist", "office", new { area = "reports" }) %>";
var availableIds = [];
<% for (var i = 0; i < Model.Data.Count (); i++) { %>
availableIds.push({ value : "<%: Model.Data.ElementAt (i).Text %>", label : "<%: Model.Data.ElementAt (i).Text %>" });
<% } %>
</script>
Razor Sintassi
<script type="text/javascript">
var jqGridIdList = "@Url.Action("getidlist", "office", new { area = "reports" })";
var availableIds = [];
@for(var i = 0; i < Model.Data.Count (); i++) {
availableIds.push({ value : "@Model.Data.ElementAt(i).Text", label : "@Model.Data.ElementAt(i).Text" });
}
</script>
Il compilatore mi dà il seguente errore sulla linea del 'availableIds.push':
Messaggio di errore del compilatore: CS1525: termine espressione non valido '{'
E 'ovviamente cercando di compilarlo come C # ... ma come faccio a fermarlo?
Grazie,
Kieron
Soluzione
È necessario avvolgerlo nella pseudo elemento <text>
. Questa operazione farà passare la schiena parser in modalità HTML e sarà quindi analizzare la javascript come parte del codice HTML e non c #. La ragione per cui accade è la @for()
è un c # blocco e tutto ciò trattati all'interno è anche considerato c # finché non è sfuggito da un tag html. Dal momento che probabilmente non si vuole un rasoio tag HTML fornisce il tag <text>
alle modalità di commutazione.
Se si nota la differenza nella vostra asp.net WebForms si finisce la linea <% for
con una %>
, che tira fuori dalla modalità c #. Se si scarica l'estensione rasoio evidenziatore per Visual Studio 2010 sarà aiuterà a vedere quando il codice viene trattato come codice HTML e viene trattato come HTML.
<script type="text/javascript">
var jqGridIdList = "@Url.Action("getidlist", "office", new { area = "reports" })";
var availableIds = [];
@for(var i = 0; i < Model.Data.Count (); i++) {
<text>availableIds.push({ value : "@Model.Data.ElementAt(i).Text", label : "@Model.Data.ElementAt(i).Text" });</text>
}
</script>
Aggiornamento per la versione più recente
È ora possibile utilizzare la sintassi @:
per ancora più leggibilità
<script type="text/javascript">
var jqGridIdList = "@Url.Action("getidlist", "office", new { area = "reports" })";
var availableIds = [];
@for(var i = 0; i < Model.Data.Count (); i++) {
@:availableIds.push({ value : "@Model.Data.ElementAt(i).Text", label : "@Model.Data.ElementAt(i).Text" });
}
</script>