2011-10-18 7 views
33

Próbuję oddzielić wszystkie rzeczy, które mogłem ponownie wykorzystać w sekcjach, więc byłoby mi łatwiej utrzymać.Nie można zażądać pliku "~/Views/Position/Edit.cshtml", ponieważ wywołuje on metodę "RenderSection".

Jednak mam ten wyjątek: pliku „~/Views/stanowisko/Edit.cshtml” nie można zamówić bezpośrednio, ponieważ nazywa „RenderSection” metoda

stworzyłem plik o nazwie sections.cshtml z następującej treści:

@section scripts{ 
    <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
    <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 
} 

iw pliku _layout.cshtml zmieniłem go na adres:

<head> 
    <meta charset="utf-8" /> 
    <title>@ViewBag.Title</title> 
    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" /> 
    @RenderSection("scripts", required:false) 
    @*<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script> 
    <script src="@Url.Content("~/Scripts/modernizr-1.7.min.js")" type="text/javascript"></script>*@ 
</head> 

Kiedy przejść do widoku w przeglądarka i sprawdź kod źródłowy, który pokazuje tylko:

<head> 
    <meta charset="utf-8" /> 
    <title>Edit</title> 
    <link href="/Content/Site.css" rel="stylesheet" type="text/css" /> 
</head> 
+0

Dlaczego nie wystarczy umieścić skrypty do pliku układu? – samack

+0

tylko próbować nauczyć się korzystać z sekcji w mvc, ale tak, to również opcja, ale co jeśli niektóre skrypty będą używane w niektórych widokach i inne skrypty w innych widokach? Sekcje rozwiązałyby to, ale plik układu nie rozwiąże problemu, prawda? –

+0

Pozbądź się @RenderSection i po prostu umieść skrypty w ... to jest punkt pliku układu, aby przechowywać te rzeczy, które są wspólne dla większości twoich stron. – samack

Odpowiedz

32

RenderSection może istnieć tylko w plikach układu (tj. strony wzorcowe) ... jego celem jest umożliwienie stronom, które można bezpośrednio zamówić, kierowanie na różne sekcje Układu (układ jest wspólny dla wszystkich stron, które decydują się na jego użycie) i dostarczanie treści dla tych różnych sekcji.

Jeśli chcesz, aby oddzielić tę część jako coś, co jest resuable na wielu stronach należy umieścić go w częściowym i zastąpić rozmowę rendersection do czegoś podobnego

@Html.Partial("Scripts") 
+1

proszę sprawdzić edycję, próbowałem to zrobić przy użyciu pliku układu zamiast częściowych widoków i nie działa, nie dostaję wyjątku. –

+0

Jeśli zmienię wymaganą sekcję na wartość true, to mam ten wyjątek: Sekcja nieokreślona: "skrypty", Czy muszę umieścić sekcję gdzie indziej? –

+0

Dzieje się tak dlatego, że bezpośrednio żądany plik musiałby zawierać sekcję w nim oznaczoną jako @sekcja skryptu {....} z ... treścią zawierającą to, co powinno znaleźć się w pliku układu w miejscu, w którym @RenderSection ("skrypty") nazywa się ... sekcje nie służą do definiowania wspólnej funkcji. To są części dla –

12

Alternatywnie można użyć helper do oddzielenia kodu używasz częściej. Szczególnie, jeśli nie można użyć sections ze względu na wspomnianą więzienną martynę.

@helper Scripts(){ 
    <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
    <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 
} 

i korzystanie tylko:

<somehtml /> 
@Scripts() 
<somehtml /> 
+3

A co, jeśli skrypty mają się znaleźć w tagu ? –

Powiązane problemy