Pregunta

Como prueba de que estoy convertir una aplicación de prueba de concepto que hemos escrito desde Web Forms a la maquinilla de afeitar, simplemente para que podamos evaluarlo.

Me he encontrado con un problema que hasta el momento de hacer la cabeza hurt..generating JavaScript en el cliente ...

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

Razor Sintaxis

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

El compilador me da el siguiente error en la línea 'availableIds.push':

Compiler mensaje de error: CS1525: Invalid término expresión '{'

Es obvio que es tratar de compilarlo como C # ... pero ¿cómo puedo detenerlo?

Gracias,
Kieron

¿Fue útil?

Solución

Se necesita envolverlo en el seudo elemento <text>. Esto cambiará la parte posterior del analizador al modo HTML y será entonces analizar el javascript, como parte de la html y no C #. La razón de que suceda es la @for() es un bloque C # y cualquier cosa tratada también se considera dentro de C # hasta que se escapó por una etiqueta HTML. Dado que es probable que no quiere una máquina de afeitar etiqueta HTML proporciona la etiqueta <text> a los modos de conmutación.

Si se observa la diferencia en su asp.net formularios web que termina la línea de <% for con un %> que se lleva a cabo del modo C #. Si descarga la extensión de afeitar rotulador para Visual Studio 2010 que le ayudará a ver cuando el código se trata como código html y se trata como 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>

Actualización para versión más reciente

Ahora puede utilizar la sintaxis @: para aún más la legibilidad

<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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top