2015-04-29 17 views
5

Załóżmy, że mieliśmy scenariusz, w którym nasza aplikacja nie używała jqueryui, z wyjątkiem jednego konkretnego szablonu edytora. Jeśli chcę uniknąć umieszczania jqueryui na każdej stronie (tj. Nie chcę umieszczać go w pakiecie, który jest domyślnie załadowany w moim _Layout.cshtml), w jaki sposób mogę mieć szablon edytora zawierający plik jqueryui.js i pliki jqueryui.css dla mnie w sposób, który nie spowodowałby wielu odniesień do tych plików, i umieściłby odniesienia w nagłówku lub na końcu mojego ciała zamiast inline?Jak dodać odwołanie do JavaScript lub css z szablonu edytora?

Oto co próbowałem w moim szablonu edytora że nie wydają się działać:

@System.Web.Optimization.Scripts.Render("~/bundles/jqueryui") 
@System.Web.Optimization.Styles.Render("~/Content/jqueryuistyles") 

To dodaje znaczniki skryptów i łącza, ale to świadczy tagi raz za korzystanie z edytora szablon, a także renderuje je bezpośrednio w linii, więc w moim przypadku, to zanim jQuery został załadowany na dole ciała.

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

Dopasowuje jak ja to zawiniątko w moim _Layout.cshtml, ale najwyraźniej nie działa z szablonu edytora. Nic nie zostało w ogóle wyrenderowane, a nawet gdyby tak było, myślę, że nadal będzie to powodowało wiele odniesień do pliku JavaScript (1 za każdym razem, gdy został nazwany szablon edytora).

Wygląda na to, że powinien istnieć sposób na szablon edytora uruchamia włączenie pliku JavaScript lub css, który można powiązać z pakietami lub przynajmniej z systemem @section. Czy ktoś wie, jak to zrobić?

+1

Jest to dokładnie powód, dla którego nigdy nie należy dołączać skryptów do szablonów lub częściowych edytorów. Dlaczego nie wystarczy dodać skrypty do określonego widoku, a nie do układu. –

+0

Możesz zajrzeć do [requirejs] (http://requirejs.org/). –

+0

@StephenMuecke Dlaczego nie umieścić go w widoku? Zdecydowanie * mogłem *, ale co jeśli powrócę później i zmienię szablon edytora z jqueryui na coś nowego ... wtedy będę musiał wyśledzić wszystkie widoki, które go użyły i oczyścić je. Innymi słowy, mam wrażenie, że widok nie powinien martwić się o to, jakie skrypty wymagają szablony edytora. Podoba mi się idea, że ​​szablon edytora jest całkowicie samowystarczalny. – ctb

Odpowiedz

-2

Wewnątrz swojej stronie _Layout.cshtml można mieć opcjonalną sekcję jQuery UI

@RenderSection("JQueryUIOptional", required: false) 

wtedy, gdy widok jest wywoływana, czynią tę sekcję z:

@section JQueryUIOptional 
{ 
    <script type="text/javascript" src="@Url.Content("~/Scripts/path-To-Jquery-UI.js")"></script> 
    <link href="@Url.Content("~/Content/styles/path-to-JqueryUIstyles.css")" rel="stylesheet" type="text/css" /> 
} 
+0

Czy to może wpłynąć na szablon edytora? Tego właśnie żąda PO. –

+0

_Layout.cshtml to przykład jednego z edytorów tepmplates, po którym następuje OP. Tak więc odpowiedź brzmi: tak – AutomationNation

+0

\ _Layout.cshtml to _layout_, a nie szablon edytora. –

1

Jednym ze sposobów osiągnięcia tego może należy zażądać wymaganych plików javascript przy użyciu bieżącego kontekstu żądania. Na przykład w szablonie Editor można napisać coś takiego żądania javascript obejmują

HttpContext.Current.Items["Required.Script"] = "~/myeditortemplate.js"; 

Następnie w układzie tuż przed renderowania jakiejkolwiek opcjonalnej sekcji skryptu można uczynić wymagane skrypt patrząc na obecnym kontekście

Scripts.Render(HttpContext.Current.Items["Required.Script"].ToString()) 

Skrypty używają pakietów skryptów w MVC. Alternatywnie możesz po prostu wysłać tag src ze skryptu do wymaganego skryptu.

Powiązane problemy