Tengo un .csHtml
archivo -razor con una función javascript que usa la @Url.Content
función C # adentro para la URL ajax.
Quiero mover esa función a un .js
archivo referenciado desde mi vista.
El problema es que javascript no "conoce" el @
símbolo y no analiza el código C #.
¿Hay alguna forma de hacer referencia a los .js
archivos desde la vista con el símbolo "@"?
c#
javascript
asp.net-mvc
asp.net-mvc-3
razor
gdoron está apoyando a Monica
fuente
fuente
Respuestas:
Puede utilizar
data-*
atributos HTML5 . Supongamos que desea realizar alguna acción cuando se hace clic en algún elemento DOM, como un div. Entonces:y luego, en su archivo javascript separado, podría trabajar discretamente con el DOM:
De esta manera, podría tener una separación pura entre el marcado y el script sin que nunca necesite etiquetas del lado del servidor en sus archivos javascript.
fuente
¡Bueno, acabo de encontrar un motor de afeitar en nuget que lo hace! ¡El significado resuelve la
@
sintaxis!Su nombre es RazorJS .
El paquete Nuget
Actualización de 2016:
el paquete no se actualizó durante 5 años y el enlace del sitio del proyecto está inactivo. Ya no recomiendo a la gente que use esta biblioteca.
fuente
Una forma de abordar el problema es:
Agregar una vista parcial con las funciones de JavaScript a la vista.
De esta forma puede utilizar el
@
símbolo y todas susjavascript
funciones están separadas de la vista.fuente
Tienes dos opciones:
Por ejemplo:
Y luego, en su vista, configúrelo:
ACTUALIZAR
Quizás se pregunte que ninguno es bueno debido al acoplamiento, bueno, es cierto, está acoplando js y view. Es por eso que los scripts deben ser ajenos a la ubicación en la que se ejecutan, por lo que es un síntoma de una organización no óptima de los archivos.
De todos modos, hay una tercera opción para crear un motor de visualización y ejecutar los archivos js contra la maquinilla de afeitar y enviar los resultados. Esto es más limpio pero mucho más lento, por lo que tampoco se recomienda.
fuente
Para obtener la
@
variable en su archivo .js, tendrá que usar una variable global y establecer el valor de esa variable desde la vista mvc que está haciendo uso de ese archivo .js.Archivo JavaScript:
Archivo de vista MVC:
Solo asegúrese de que cualquier llamada a su función ocurra DESPUÉS de que la vista haya establecido el valor.
fuente
Probablemente este no sea el enfoque correcto. Considerando la separación de preocupaciones. Debería tener un
data injector
en suJavaScript
clase y, en la mayoría de los casos, los datos sonJSON
.Cree un archivo JS en su
script
carpeta y agregue esta referencia a suView
Ahora, considere una
JavaScript
clase literal en suyourJsFile.js
:También declara una clase
Ahora, de tu
Action
haz esto:Y desde tu punto de vista:
fuente
Recientemente escribí en un blog sobre este tema: Generación de archivos JavaScript externos usando vistas parciales de Razor .
Mi solución es usar un atributo personalizado (
ExternalJavaScriptFileAttribute
) que representa una vista parcial de Razor como está y luego la devuelve sin las<script>
etiquetas circundantes . Eso lo convierte en un archivo JavaScript externo válido.fuente
Por lo general, envuelvo JS que necesita acceso a las propiedades del modelo, en funciones y luego paso el @algo en la vista. Por ejemplo
en la vista agrego la invocación de la función a través de (solo un ejemplo):
fuente
Creo que estás atrapado en tener que poner ese código JS en la Vista. El analizador de Razor, hasta donde yo sé, no mira los archivos .js, por lo tanto, cualquier cosa que tenga que use
@
no funcionará. ADEMÁS, como ha visto, a Javascript en sí no le gusta que este@
carácter merodee sin ninguna razón, aparte de, digamos, en una cadena.fuente