2012-10-05 1 views
10

Pracuję nad aplikacją mobilną JQuery w maszynie wirtualnej ASP.net MVC4 za pomocą VSRC, W skryptach sekcji strony cshtml są napisane tak, jak poniżej.Skrypt przekroju nie renderowany w maszynie ASP.net MVC4 brzytwa

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

W layout.cshtml mam ...

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

Działa na początkowej stronie (strona, która czyni pierwszy), ale kiedy to połączone poprzez „actionlink” na innych stronach wówczas sekcji skrypt napisany na tych stronach nie działa.

Wszelkie pomysły?

Proszę o pomoc, dzięki.

Odpowiedz

1

Miałem ten sam problem. Aby tego uniknąć, po prostu unikam sekcji "Skrypty".

Usuń @section Scripts{ z każdej strony i umieść swój kod js na końcu strony.

Na przykład, należy przenieść @Scripts.Render("~/bundles/jquery", "~/bundles/jquerymobile") do linii przed </head> w _Layout.cshtml. Zapewni to, że jquery zostanie załadowany, gdy otrzyma on $(document).ready(function() {...

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

wyjaśnienie, dlaczego tak się dzieje i inne rozwiązanie. 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

jest to problem, jeśli wziąć wszystkie skrypty na dole strony, aby obciążenie HTML pierwszy, ale nadal jest to rozwiązanie –

+6

-1: choć jego starą odpowiedź, znaleziona że podczas korzystania z google, a tak naprawdę jest to zła/zła odpowiedź na problem. Ponieważ faktycznie dobrą praktyką jest umieszczenie javascript na dole strony ... Domyślam się, że problem polegał na tym, że sekcja nie była wypełniona częściowym widokiem ani żadnym innym problemem. Ale to obejście jest po prostu ZŁE! Zobacz również http://stackoverflow.com/questions/7556400/injecting-content-into-specific-sections- from-a-partial-view-asp-net-mvc-3-with – MichaC

2

Po linii Erick Bacallao, ja sugest Ci następujące:

unikać stosując URL.Content(), aby załadować .min.js ö .js. Scripts.Render() wybiera odpowiedni plik w każdym scenariuszu (.js w debugowaniu i .min.js w wydaniu).

Zmodyfikowany _Layout.cshtml będzie wyglądać następująco:

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

UWAGA: Wyłączenie jQuery mobile AJAX (jak to robi) jest łatą ... nie jest to kompletne rozwiązanie! UX znacznie się zmniejsza.

0

Czy nie jest to spowodowane odstąpieniem ajax-a?

To, co wierzę, to to, że dom zmienia się w obszarze Ajaxowanym, a DOM nie wiąże ponownie zdarzeń z tym dokumentem. Działa tylko raz przy ładowaniu strony.

Aby to działało, konieczne jest ponowne zainicjowanie powiązania DOM ze zdarzeniem po częściowej aktualizacji.

historycznie zawsze było to problemem z aktualizacjami ASP.Net i docuemt.ready, ale sposób obejścia tego problemu polega na umieszczeniu kodu w funkcji pageLoad(), ponieważ wywoływane jest to każde odświeżenie.

Nie jestem pewien, czy to zadziała z MVC.

Zamówienie to, aby uzyskać więcej informacji http://www.dotnet-tricks.com/Tutorial/aspnet/D719120612-Difference-between-document.ready-and-window.onload-or-pageLoad.html

+0

To faktycznie działa, gdy używasz ajax i usuń javascript z '@section scripts {}' –

0

ja naprawdę nie wiem dlaczego i nie mają czasu jeszcze zrozumieć to, ale miałem ten sam problem dziś rano. Wygląda na to, że @section scripts nie działa, gdy jest umieszczony na katalogu głównym strony widoku cshtml.Następujące poprawki kodu poniżej:

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