Pregunta

Tengo una vista que utiliza una página maestra que contiene algunos javascript que deben ejecutarse utilizando la carga del cuerpo. ¿Cuál es la mejor manera de configurar OnLoad en mi MasterPage solo para ciertas vistas?

La idea que intenté fue pasar el nombre de la función javascript como ViewData. Pero realmente no quiero que mis Controladores tengan que saber sobre el javascript en la página. Realmente no me gusta este enfoque ...

<body onload="<%=ViewData["Body_OnLoad"]%>">
<asp:ContentPlaceHolder ID="MainContent" runat="server" />

Editar: supongo que una idea sería utilizar el evento preparado para documentos de jQuery en su lugar ...

¿Alguna otra idea?

¿Fue útil?

Solución

He estado usando el siguiente patrón con mi proyecto MVC actual y parece que está funcionando bastante bien para mi trabajo .js hasta ahora ...

Dentro de mi página maestra, cargo mis archivos de script estándar que quiero que se usen en todas mis páginas de contenido (cosas como jquery.js, global.js, jquery-plugins, archivos .css, etc.). Luego defino los eventos que son necesarios en mi página maestra (onLoad, onSave, etc.). Cada página de contenido que creo tendrá su propio archivo .js asociado y cargaré ese archivo de script dentro de la página de contenido .aspx. Cualquier evento .js que deba implementarse de manera diferente entre las páginas de contenido se maneja dentro del archivo de contenido individual .js. Básicamente, mi página maestra tiene un conjunto de funciones .js que implementarán los scripts de la página de contenido. En este momento, solo almaceno las firmas de la función .js de la plantilla en un archivo y las copio y pego en cada nuevo archivo content.js que necesito crear. Sin embargo, estoy pensando en crear un generador de código o una herramienta que pueda escupir estas firmas de plantillas en cualquier nuevo archivo .js que necesite crear (si .js tiene algún tipo de capacidad de interfaz o características de herencia, hágamelo saber).

Para recapitular:

MasterPage.Master Loads: jquery.js, global.js, plugins.js

Cargas de ContentPage: ContentPage.js

Global.js contiene funciones que la página maestra invoca que no cambian entre las páginas de contenido junto con cualquier otra función de rutina global.

Cada ContentPage.js implementa sus propias funciones para la página de contenido junto con las funciones que invoca la página maestra que tienen un comportamiento diferente.

Otros consejos

Ahora que JQuery es oficialmente parte de ASP.NET MVC, recomendaría su uso. Es pequeño y agrega toneladas de valor a su aplicación.

Recomendaría agregar la versión de Mustafa de JQuery que incluye los comentarios de Intellisense:

jquery-1.2.6-intellisense. js

Luego agrégalo a tu carpeta de Scripts (nuevo en MVC Beta 1), y haz referencia a esto de esta manera:

<script language="javascript" type="text/javascript" src="../../Scripts/jquery-1.2.6-intellisense.js"></script> 

En tu código ahora puedes agregar una función como esta:

$(document).ready(function() {
   // do stuff when DOM is ready
});

Como mencionó que solo desea que ocurra en ciertas vistas, puede agregar un marcador de posición en su Página maestra como este:

<asp:contentplaceholder id="JavascriptPlaceholder" runat="server"></asp:contentplaceholder>  

Luego, en tu Vista, puedes optar por poner el código allí o no.

que iría dentro de la sección principal

Solución del blog: Uso body onload con ASP.net 2.0 MasterPages

MasterPage.master

<head>
<asp:ContentPlaceHolder runat="server" id="Headers">
</asp:ContentPlaceHolder>
<script language=javascript>
   function mp_onload() {
     if(window.body_onload != null)
     window.body_onload();
   }
</script>
</head>
<body onload="mp_onload();">

Default.aspx

<asp:Content ID="Content2" ContentPlaceHolderID="Headers" Runat="Server">
<script language="javascript">
   function body_onload()
   {
       //do something
   }
</script>
</asp:Content>
 

De todos modos, deberías usar jQuery u otro marco de JavaScript.

Haga que sus controladores pasen algún tipo de indicador de estado a sus vistas, pero no cosas específicas de las vistas, como los nombres de las funciones de JavaScript. Depende de sus puntos de vista, asignar indicadores de estado a nombres de funciones de JavaScript.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top