2012-10-05 13 views
10

Sto sviluppando un'applicazione mobile JQuery in ASP.net MVC4 rasoio con VSRC, Nella sezione della pagina cshtml gli script sono scritti come segue.Script di sezione non rendering in ASP.net MVC4 rasoio

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

In layout.cshtml ho ...

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

Si lavora per la pagina iniziale (la pagina che rendono in primo luogo), ma quando collegata tramite "ActionLink" ad altre pagine poi la sezione lo script scritto in quelle pagine non funziona.

Qualche idea?

Per favore aiuto, grazie.

risposta

1

Ho avuto lo stesso problema. Per ovviare al problema, evito semplicemente la sezione "Script".

Rimuovere @section Scripts{ da ogni pagina e inserire il codice js alla fine della pagina.

Per l'esempio, assicurarsi di spostare @Scripts.Render("~/bundles/jquery", "~/bundles/jquerymobile") sulla riga prima di </head> in _Layout.cshtml. Questo garantirà che jQuery è caricato quando si arriva a $(document).ready(function() {...

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

spiegazione sul motivo per cui accade e altra soluzione. 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

questo è un problema quando si prende tutti gli script in fondo alla pagina per fare carico html prima, ma comunque è una soluzione –

+6

-1: anche se la sua un vecchio risposta, ha trovato che durante l'utilizzo di Google, e in realtà è una risposta sbagliata/sbagliata per il problema. Perché in realtà è buona pratica mettere il javascript in fondo alla pagina ... Credo che il problema era che la sezione non era popolata da una vista parziale o da qualsiasi altro problema. Ma questa soluzione alternativa è semplicemente CATTIVA! Vedi anche http://stackoverflow.com/questions/7556400/injecting-content-into-specific-sections-from-a-partial-view-asp-net-mvc-3-with – MichaC

2

Seguendo la linea di Erick Bacallao, ti suggerisco la seguente:

Evitare di utilizzare URL.Content() per caricare .min.js o .js file. Scripts.Render() sceglie il file giusto in ogni scenario (.js in Debug e .min.js nella versione).

Il _Layout.cshtml modificata sarebbe simile a questa:

@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 disattivazione jQuery Mobile AJAX (come questo fa) è una patch ... non una soluzione completa! UX decresase molto.

0

Non è causato dal postback ajax?

Quello che credo stia accadendo è che la dom sta cambiando nell'area Ajaxified e il DOM non sta riconciliando gli eventi ad esso a causa del documento. Già in esecuzione solo una volta al caricamento della pagina.

Per ottenere questo risultato, è necessario riavviare il binding del DOM all'evento dopo un aggiornamento parziale.

storicamente questo è sempre stato un problema con i pannelli di aggiornamento ASP.Net e docuemt.ready, il modo per aggirare il problema è di inserire il codice in un pageLoad(), invece, in questo modo viene richiamato ogni postback.

Non sono sicuro che questo funzioni con MVC.

Acquista questo per più informazioni http://www.dotnet-tricks.com/Tutorial/aspnet/D719120612-Difference-between-document.ready-and-window.onload-or-pageLoad.html

+0

Funziona davvero quando usi ajax e togliere javascript da '@section scripts {}' –

0

Io davvero non so perché e non hanno il tempo ancora per capirlo, ma ho avuto lo stesso problema di questa mattina. Sembra che @section scripts non funzioni quando è posizionato nella root della pagina di visualizzazione cshtml.Le seguenti correzioni di codice in questo modo:

@{ 
    @section scripts { 
     @Scripts.Render("~/bundles/jqueryval") 
    } 
} 
Problemi correlati