Quiero mantener todo mi código JavaScript en una sección; justo antes de la body
etiqueta de cierre en mi página de diseño maestro y me pregunto qué es lo mejor para hacerlo, al estilo MVC.
Por ejemplo, si creo un DisplayTemplate\DateTime.cshtml
archivo que usa el selector de fecha y hora de jQuery UI, incrustaría el JavaScript directamente en esa plantilla, pero luego se procesará en la mitad de la página.
En mis vistas normales, puedo usar @section JavaScript { //js here }
y luego @RenderSection("JavaScript", false)
en mi diseño maestro, pero esto no parece funcionar en las plantillas de visualización / editor, ¿alguna idea?
Respuestas:
Puede proceder con una conjunción de dos ayudantes:
y luego en tu
_Layout.cshtml
:y en algún lugar de alguna plantilla:
fuente
sections
. En MVC4 Bundling podría usarse de hecho y ayuda a reducir el tamaño de los scripts.head
etiqueta en lugar de al final de labody
etiqueta, porque@Html.RenderScripts()
se ejecutará antes de su vista parcial y, por lo tanto, antes@Html.Script()
.Versión modificada de la respuesta de Darin para garantizar el pedido. También funciona con CSS:
Puede agregar recursos JS y CSS como este:
Y renderice recursos JS y CSS como este:
Puede hacer una verificación de cadena para ver si comienza con un script / enlace para que no tenga que definir explícitamente qué es cada recurso.
fuente
Enfrenté el mismo problema, pero las soluciones propuestas aquí funcionan bien solo para agregar una referencia al recurso y no son muy adecuadas para el código JS en línea. Encontré un artículo muy útil y envolví todos mis JS en línea (y también las etiquetas de script) en
Y en la vista _Layout colocada
@Html.PageScripts()
justo antes de cerrar la etiqueta 'body'. Funciona como un encanto para mí.Los propios ayudantes:
fuente
Me gustó la solución publicada por @ john-w-harding, así que la combiné con la respuesta de @ darin-dimitrov para hacer la siguiente solución probablemente demasiado complicada que le permite retrasar la renderización de cualquier html (también scripts) dentro de un bloque de uso.
USO
En una vista parcial repetida, solo incluya el bloque una vez:
En una vista parcial (¿repetida?), Incluya el bloque para cada vez que se use el parcial:
En una vista parcial (¿repetida?), Incluya el bloque una vez y luego renderícelo específicamente por su nombre
one-time
:Para renderizar:
CÓDIGO
fuente
Instale el paquete nuget Forloop.HtmlHelpers: agrega algunos ayudantes para administrar scripts en vistas parciales y plantillas de editor.
En algún lugar de su diseño, debe llamar
Aquí será donde se generarán los archivos de secuencia de comandos y los bloques de secuencia de comandos en la página, por lo que recomendaría colocarlo después de sus secuencias de comandos principales en el diseño y después de una sección de secuencias de comandos (si tiene una).
Si está utilizando el marco de optimización web con agrupación, puede utilizar la sobrecarga
de modo que este método se utiliza para escribir archivos de script.
Ahora, en cualquier momento que desee agregar archivos de script o bloques en una vista, vista parcial o plantilla, simplemente use
Los ayudantes aseguran que solo se procese una referencia de archivo de script si se agrega varias veces y también asegura que los archivos de script se procesen en el orden esperado, es decir
fuente
Esta publicación realmente me ayudó, así que pensé en publicar mi implementación de la idea básica. Introduje una función auxiliar que puede devolver etiquetas de script para usar en la función @ Html.Resource.
También agregué una clase estática simple para poder usar variables escritas para identificar un recurso JS o CSS.
Y en uso
Gracias a @Darin Dimitrov, quien proporcionó la respuesta a mi pregunta aquí .
fuente
La respuesta dada en Rellenar una sección de Razor a partir de un parcial utilizando
RequireScript
HtmlHelper sigue el mismo patrón. También tiene la ventaja de que busca y suprime las referencias duplicadas a la misma URL de Javascript, y tiene unapriority
parámetro que se puede usar para controlar los pedidos.Extendí esta solución agregando métodos para:
Sin embargo, me gustan las soluciones de & eth0 de Darin, ya que utilizan la
HelperResult
plantilla, que permite bloques de script y CSS, no solo enlaces a archivos JavaScript y CSS.fuente
@Darin Dimitrov y @ eth0 respuestas para usar con el uso de extensión de paquete:
fuente