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

È stato utile?

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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top