2012-12-01 8 views
30

Mam układ z sekcją @RenderSection("scripts") i mam pakiet, który należy dołączyć w tej sekcji dla niektórych widoków. Pomyślałem, że samo zrobienie tego w widoku będzie działało, ale nie renderuje skryptów.Jak dołączyć pakiet skryptów w sekcji skryptów w widoku

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

Moim zdaniem, jak mogę to pakiet do sekcji skryptów?

Układ

@Scripts.Render("~/bundles/jquery", "~/bundles/scripts") 
@RenderSection("scripts", required: false) 

Zobacz

@section scripts { 
    @Scripts.Render("~/bundles/movie") 
} 
+1

To zdecydowanie powinno działać i jest obsługiwane. Sprawdziłbym literówki w nazwie pakietu - np. upewnia się, że jego '~/bundles/movie', a nie' ~/scripts/movie' w twoim 'BundleConfig'. – Mrchief

+0

Jestem niesamowicie spóźniony, ale widocznie nawet w VS2015 może się to zdarzyć. Kod jest prawidłowy, ale musiałem zrestartować VS, aby uzyskać prawidłowe renderowanie. – Lathejockey81

Odpowiedz

13

Dlaczego wymieszać rendersection z łączenie? Jeśli zdecydujesz się na obniżenie trasy sprzedaży pakietowej, możesz po prostu umieścić swoje skrypty w pliku .JS, umieścić go w swoim własnym pakiecie, jeśli chcesz i wywołać ten pakiet w widoku. Dla ex:

 bundles.Add(new ScriptBundle("~/bundles/myscripts").Include(
        "~/Scripts/myscript1.js", 
        "~/Scripts/myscript2.js")); 

następnie widok będzie mieć następujące:

@Scripts.Render("~/bundles/myscripts") 

także upewnić się, że Web.config jest kompilacją debugowania ustawiona na false jak poniżej:

<compilation debug="false" />    

to pilnuje skrypty są spakowane i zminimalizowane.

Aktualizacja

Na podstawie uwag i moich ostatnich doświadczeń, mogę zrozumieć, dlaczego chcielibyśmy używać dwóch razem. Idealny przypadek nauki w społeczności! :) Tak więc, jeśli zdecydujesz się powrócić do refaktoryzacji, upewnię się, że nie ma żadnych literówek na początek. Jeśli nadal nie działa, proszę dać mi znać, na czym polega problem, a ja odpowiednio zaktualizuję odpowiedź. Dziękuję wszystkim!

+1

Ponieważ potrzebuję pakietu do załadowania po pakiecie jquery w układzie. Po wyrenderowaniu pakietu podobnego do powyższego w moim widoku wyrenderuje się przed pakietem jquery. – bflemi3

+0

Zwykle umieszczam pakiet jQuery bezpośrednio u góry, w przeciwieństwie do domyślnego u dołu strony i wszystko działa poprawnie. Zapłać ten kod sklepu muzycznego MVC https://github.com/tekpub/mvcmusic/tree/master/MvcMusicStore – Yogiraj

+4

Możesz nie chcieć renderować wszystkiego na każdej stronie. Podział zapewnia kontrolę nad tym. Umieszczenie wszystkiego w głowie jest okropnym rozwiązaniem (jQuery może być wyjątkiem). – Mrchief

35

Przymierz poniżej wymienione rozwiązania wewnątrz View.

Zobacz

@section Scripts{ 
    <script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/bundles/movie")"></script> 
} 
+11

Weź to jako zaakceptowaną odpowiedź. –

+0

Dlaczego powinna to być zaakceptowana odpowiedź? Ignoruje flagę 'debug'. – Dementic

+1

@ Demokracja Dlaczego nie umieścisz wtedy swojej własnej odpowiedzi? – Sampath

2

nie może replikować problem, który mają

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

renderuje grzywny bez problemu (i szanuje flagę debugowania) i zgodzi się z @Mrchref i ponownie twoje ścieżki

na drugim ręcznie, można użyć coś takiego:

public static class Helpers 
{ 
    public static HtmlString StaticContent(this System.Web.Mvc.UrlHelper url, string contentPath) 
    { 
     return new HtmlString(System.Web.Optimization.Scripts.Render(contentPath).ToString()); 
    } 
} 

Zastosowanie:

@section Scripts{ 
    @Url.StaticContent("~/assets/js/jquery") 
} 

radzę go nie używać, jak jest, Trzeba by znaleźć inne rozwiązanie dla System.Web.Optimization.Scripts.Render(contentPath).ToString() ponieważ w zasadzie czyni tę samą funkcję, którego używasz (nie pracuje).

Powinieneś zagrać z System.Web.Optimization.BundleTable.Bundles i sprawdzić, czy możesz zapytać o obie wersje, sprawdź flagę debugowania i podaj poprawną treść.

1

Wierzę, że nowa kompilacja rozwiąże problem. Proszę wykonać następujące kroki, jeśli nie:

  • Krok 1: dodać to do BundleConfig.cs

    bundles.Add(new ScriptBundle("~/bundles/common").Include("~/Scripts/common.js"));

  • Krok 2: dodać ten wiersz w swoim view/layout

    @Scripts.Render("~/bundles/common")

  • Krok 3: zbuduj swój projekt i uruchom go.

Powiązane problemy