2012-10-05 29 views
10

Estoy desarrollando una aplicación móvil JQuery en ASP.net MVC4 con VSRC, en la sección de página cshtml los guiones se escriben como los siguientes.Script de sección sin representación en ASP.net MVC4 razor

@section Scripts 
{ 
    <script type="text/javascript"> 
    $(document).ready(function() { 
     jQuery("#register-form").validationEngine(); 
    }); 
</script> 
} 

En layout.cshtml tengo ...

"@RenderSection("Scripts", false)". 

Funciona para la página inicial (página que hacen que el primero), pero cuando se une mediante "ActionLink" a otras páginas entonces la sección de El guión escrito en esas páginas no funciona.

¿Alguna idea?

Por favor, ayuda, gracias.

Respuesta

1

Tuve el mismo problema. Para solucionar esto, simplemente evito la sección "Scripts".

Elimina @section Scripts{ de cada página y coloca el código js al final de la página.

Para su ejemplo, asegúrese de mover @Scripts.Render("~/bundles/jquery", "~/bundles/jquerymobile") a la línea antes de </head> en _Layout.cshtml. Esto garantizará que jQuery se carga cuando se llega a $(document).ready(function() {...

================================== =============

explicación sobre por qué sucede y otra solución. http://lextell.com/blog/2012/10/23/script-section-is-not-rendered-in-asp-net-mvc-4-jquery-mobile-when-navigate-to-another-page-2/

+0

esto es un problema cuando se toma todas las secuencias de comandos en la parte inferior de la página para hacer que la carga html primera, pero aún así es una solución –

+6

-1: aunque su respuesta de edad, se encontró que al usar Google, y en realidad es una respuesta incorrecta/incorrecta para el problema. Porque en realidad es una buena práctica colocar el javascript en la parte inferior de la página ... Supongo que el problema fue que la sección no se completó desde una vista parcial o cualquier otro problema. ¡Pero esta solución es MALA! También vea http://stackoverflow.com/questions/7556400/injecting-content-into-specific-sections-from-a-partial-view-asp-net-mvc-3-with – MichaC

2

Siguiendo la línea de Erick Bacallao, te sugest lo siguiente:

Evitar el uso de URL.Content() para cargar .min.js o archivos .js. Scripts.Render() elige el archivo correcto en cada escenario (.js en Debug y .min.js en Release).

El _Layout.cshtml modificado se vería así:

@Scripts.Render("~/bundles/jquery") 
    <script type="text/javascript"> 
     $(document).bind("mobileinit", function() { 
      $.mobile.ajaxEnabled = false; 
     }); 
    </script> 
    @Scripts.Render("~/bundles/jquerymobile") 
    @RenderSection("scripts", required: false) 

NOTA: la desactivación de jQuery Mobile AJAX (como esto lo hace) es un parche ... no es una solución completa! UX disminuye mucho.

0

¿No es esto causado por la devolución de datos de Ajax?

Lo que creo que está sucediendo es que el dom está cambiando en el área de Ajaxified y el DOM no vuelve a enlazar los eventos debido al documento. Ya se está ejecutando solo una vez en la carga de la página.

Para que esto funcione, tendrá que reiniciar el enlace del DOM al evento después de la actualización parcial.

históricamente esto siempre ha sido un problema con los paneles de actualización ASP.Net y docuemt.ready, la forma de evitarlo es poner el código en un pageLoad() en su lugar, esto se llama cada devolución.

No estoy seguro de que esto funcione con MVC.

Pedido esto para más información http://www.dotnet-tricks.com/Tutorial/aspnet/D719120612-Difference-between-document.ready-and-window.onload-or-pageLoad.html

+0

En realidad, funciona cuando utiliza ajax y saque javascript de '@scripts de sección {}' –

0

Realmente no sé por qué y no tienen aún el momento de averiguarlo, pero no tenía el mismo problema esta mañana. Parece que @section scripts no funciona cuando se coloca en la raíz de la página de vista cshtml.Los siguientes correcciones de código esto:

@{ 
    @section scripts { 
     @Scripts.Render("~/bundles/jqueryval") 
    } 
} 
Cuestiones relacionadas