54 votes

Syntaxe de rasoir et Javascript

Comme un test, je suis la conversion d'une preuve-de-concept de l'app, nous avons écrit à partir des Formulaires Web de Rasoir, simplement pour que nous puissions l'évaluer.

J'ai couru dans un problème de la mesure qui fait mal à la tête..génératrices de Javascript côté client...

Formulaires Web

<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>

La Syntaxe Razor

<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>

Le compilateur me donne le message d'erreur suivant sur la " availableIds.push' ligne:

Compilateur Message d'Erreur: CS1525: Invalid expression du terme '{'

C'est bien évidemment essayer de le compiler en C#...mais comment puis-je l'arrêter?

Merci,
Kieron

97voto

BuildStarted Points 15931

Vous devez envelopper dans le pseudo-élément <text>. La commutation de l'analyseur de retour à la mode html et il sera alors analyser le javascript dans le cadre de l'html et pas en c#. La raison pour laquelle il arrive est l' @for() c# bloc et rien traitées à l'intérieur est également considéré comme c# jusqu'à ce qu'il se sauve par une balise html. Puisque vous ne voulez probablement pas une balise html rasoir fournit l' <text> balise pour basculer entre les modes.

Si vous remarquez la différence dans votre asp.net webforms à la fin de l' <% for ligne avec un %> qui le prend de c# en mode. Si vous téléchargez le rasoir surligneur extension pour visual studio 2010, il vous aidera à voir si le code est traité comme un code et le code html est traité comme du 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>

Mise à jour pour la dernière version

Vous pouvez maintenant utiliser l' @: de la syntaxe pour encore plus de lisibilité

<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>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X