Mam scenariusz, w którym chciałbym załadować skrypty w zależności od typu żądania. Na przykład, załóżmy, że mam ten kod:Skrypty sekcji lub zwykłe <script> w zależności od typu żądania
@section scripts {
<script>
$('#tabsContainer').InitializeTabs();
</scripts>
}
ładuje się idealnie, gdy chcę załadować całą stronę. Jednak mam coś, w którym użytkownik może również załadować stronę częściowo. Scenariusz jest tak:
public ActionResult Page() {
if (Request.IsAjax()) return PartialView();
return View()
}
Problem polega na tym, czy to jest załadowany częściowo, skrypt nie działa, ponieważ skrypty @section nie działa w częściowej. Jeśli umieściłem go poza skryptami sekcji, nie działa on w pełnym widoku, ponieważ mam swoje skrypty na dole i próbuje uruchomić skrypt przed załadowaniem rzeczywistych plików JavaScript.
Zastanawia mnie dobry sposób na wdrożenie tego. Mogę przenosić moje skrypty na górze strony i to powinno rozwiązać wszystkie problemy. Mógłbym też mieć 2 różne skrypty, ale to może oznaczać, że muszę napisać ten sam kod dwa razy.
Czy ktoś wie, w jaki sposób można to wdrożyć? Może helper HTML, który ładuje skrypt w skryptach @section {} lub w standardowych znacznikach skryptów w zależności od typu żądania?
Zasadniczo, co to jest właściwy sposób to napisać:
@if (!Request.IsAjaxRequest())
{
<text>
@section scripts
{
<script>
$(function() {
$("#tabs").tabs();
});
</script>
}
</text>
}
else
{
<text>
<script>
$(function() {
$("#tabs").tabs();
ga('set', 'page', '/new-page.html'); // Update Google Analytics
});
</script>
</text>
}
Dzięki z góry za pomoc.
Skrypty powinny ** ** nigdy być w podszablonów. Umieść swoje skrypty w widoku lub układzie –
Chciałbym się nie zgodzić w tej sprawie. Jasne, zgadzam się, że powinny ** prawie nigdy ** być w częściowym widoku. Jednak mając _FullView_, który może być renderowany w _PartialView_, mam wrażenie, że może to być w porządku? Czy mógłbyś ewentualnie zdefiniować inny sposób, w jaki mogę $ ("# tabs") .Inicjalizuj() po załadowaniu widoku (czy jest pełny czy częściowy i oprócz metod, które napisałem powyżej)? – FerX32
Dodano przykład, aby dalej zilustrować mój punkt widzenia. – FerX32