mvc - url action javascript
Sintaxis Razor y Javascript (1)
Debe envolverlo en el pseudo elemento <text>
. Esto cambiará el analizador al modo html y luego analizará el javascript como parte del html y no c #. La razón por la que sucede es que el @for()
es ac # y todo lo que se trata en el interior también se considera c # hasta que se escape por una etiqueta html. Dado que es probable que no desee una etiqueta html, la afeitadora proporciona la etiqueta <text>
para cambiar de modo.
Si nota la diferencia en sus formularios web asp.net, finaliza el <% for
línea con un %>
que lo saca del modo c #. Si descarga la extensión del resaltador de afeitar para Visual Studio 2010, lo ayudará a ver cuándo el código se trata como código y html 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 la última versión
Ahora puede usar la sintaxis @:
para una mayor 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>
Como prueba, estoy convirtiendo una aplicación de prueba de concepto que hemos escrito de Web Forms a Razor, simplemente para que podamos evaluarla.
Me he encontrado con un problema hasta ahora que me está haciendo daño ... generando Javascript en el cliente ...
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>
Sintaxis 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>
El compilador me da el siguiente error en la línea ''availableIds.push'':
Mensaje de error del compilador: CS1525: término de expresión no válido ''{''
Obviamente está tratando de compilarlo como C # ... pero ¿cómo lo detengo?
Gracias,
Kieron