Jestem nowy w ASP MVC i korzystam z samouczka Wprowadzenie do ASP MVC 4 Beta http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/intro-to-aspnet -mvc-4
Napotykam błąd, na który nie mogę znaleźć odpowiedzi ani nie mam dużego doświadczenia w programowaniu, więc nie wiem, od czego w ogóle zacząć to naprawiać i przejdź do samouczka. Doceniam każdą pomoc, której możesz udzielić.
Jestem w sekcji Dostęp do danych Twojego modelu z kontrolera i otrzymuję ten błąd, kiedy próbuję stworzyć film jako część samouczka, klikam łącze „Utwórz nowy” i pojawia się następujący błąd
Następujące sekcje zostały zdefiniowane, ale nie zostały wyrenderowane dla strony układu> "~ / Views / Shared / _Layout.cshtml": "Scripts"
Zamiast używać programu Visual Studio Express, zdecydowałem się pobrać program Visual Studio 2012 RC (nie jestem pewien, czy to byłaby główna przyczyna mojego problemu.
Zdaję sobie sprawę, że możesz wymagać dołączenia kodu, aby odpowiedzieć na to pytanie, ale nie jestem pewien, jaki kod w ogóle uwzględnić. Proszę doradzić, jaki kod mam dołączyć, jeśli w ogóle, a ja z przyjemnością dodam go do mojego pytania.
Dziękuję Ci,
źródło
@section
który NIE jest renderowany w układzie (zRenderSection
). Może się tak zdarzyć, jeśli odwołałeś się do niewłaściwegoLayout
lub w ogóle zapomniałeś odniesienia do układu. Zobacz odpowiedź @ vonvOdpowiedzi:
Oznacza to, że zdefiniowałeś sekcję w swoim głównym Layout.cshtml, ale nie umieściłeś niczego dla tej sekcji w swoim widoku.
Jeśli twój _Layout.cshtml ma coś takiego:
Następnie wszystkie widoki, które używają tego układu, muszą zawierać
@section
o tej samej nazwie (nawet jeśli zawartość sekcji jest pusta):Alternatywnie możesz ustawić wymagane na false, wtedy nie będziesz musiał dodawać sekcji w każdym widoku,
lub też możesz zawinąć
@RenderSection
wif
blok,źródło
, required: false)
aby to@RenderSection("scripts", required: false)
umożliwić, pozwoli na uwzględnienie lub nie.@RenderSection("scripts", required: false)
w wygenerowanym _Layout.cshtml jest właściwym rozwiązaniem. (Zobacz dyskusję poniżej, aby dowiedzieć się, dlaczego.) W ten sposób można dodać poprawkę w jednym pliku, a nie we wszystkich - jest to znacznie bardziej DRYER.Możesz również dodać następujący wiersz do
_Layout.cshtml
lub_Layout.Mobile.cshtml
:źródło
Miałem przypadek z 3 poziomami a'la _ MainLayout.cshtml <--- _ Middle.cshtml <--- Page.cshtml . Nawet jeśli robisz to w ten sposób:
_MainLayout.cshtml
_Middle.cshtml
i definiowanie w Page.cshtml
Nadal otrzymywałbym błąd
Okazało się, że błąd polegał na tym, że Middle.cshtml polegało na /Views/_ViewStart.cshtml w celu rozwiązania swojego układu nadrzędnego. Problem został rozwiązany przez jawne zdefiniowanie tego w Middle.cshtml :
Nie mogę się zdecydować, czy to byłby projekt, czy błąd w MVC 4 - w każdym razie problem został rozwiązany :)
źródło
@section Foo {@RenderSection("Foo")}
„przekazać” sekcje! Musiałem też przekazać ciało@RenderBody()
.Nie jestem pewien, dlaczego zaakceptowano odpowiedź, skoro sugerowane rozwiązanie nie przyniosło rezultatu i nie rozwiązuje problemu. W rzeczywistości mogą istnieć dwie powiązane kwestie związane z tym tematem.
Problem 1
Strona wzorcowa (np.
_Layout.cshtml
) Ma zdefiniowaną sekcję i jest wymagana, ale dziedziczące widoki jej nie zaimplementowały. Na przykład,Szablon układu
Dziedziczenie
Nie ma potrzeby pokazywania żadnego kodu, wystarczy wziąć pod uwagę, że w widoku nie ma implementacji
@section OptionBox {}
.Błąd dotyczący problemu nr 1
Section not defined: "OptionBox ".
Wydanie nr 2
Na stronie głównej (np
_Layout.cshtml
) ma przekrój określony i jest wymagane, a widok dziedziczenie nie realizować go. Jednak widok implementujący ma dodatkowescript
sekcje, które nie są zdefiniowane na żadnej ze stron wzorcowych.Szablon układu
same as above
Dziedziczenie
Błąd dotyczący problemu nr 2
The following sections have been defined but have not been rendered for the layout page "~/Views/Shared/_Layout.cshtml": "StatsBox"
Problem PO jest podobny do problemu nr 2, a akceptowana odpowiedź dotyczy problemu nr 1.
źródło
Myślę, że nasze rozwiązanie wystarczająco różniło się od wszystkich innych, więc udokumentuję je tutaj.
Mamy ustawiony układ główny, układ pośredni, a następnie renderowanie końcowej strony akcji. Main.cshtml <- Config.cshtml <- Action.cshtml
Dopiero gdy web.config
customErrors='On/RemoteOnly'
otrzymaliśmy niestandardowy błąd i nieApplication_Error
został wywołany żaden wyjątek . Mogę to przechwycićLayout = null
online w pliku Error.cshtml. Wyjątkiem był jak w pytaniu, brak sekcji skryptów.Zrobiliśmy to zdefiniowane w Main.cshtml (z required: false), a Action.cshtml nie zawierało niczego, co zapisano w sekcji skryptów.
Rozwiązaniem było dodanie
@section scripts { @RenderSection("scripts", false) }
do pliku Config.cshtml.źródło
Występuje zasadniczo, gdy _Layout.cshtml jest bez:
lub z
BEZ
Więc po prostu dodaj @RenderSection ("skrypty", wymagane: false) w _Layout.cshtml i działa to specjalnie dla tych programistów, którzy pracują z projektami generowanymi przez Kendoui.
źródło
Wygląda na to, że istnieje niezgodność między plikami widoku, które niektóre wersje programu Visual Studio generują automatycznie, gdy używasz go do tworzenia nowego modelu. Napotkałem ten problem, używając nowej VS 2013 Community Edition i przechodząc przez samouczek W3Schools pod adresem http://www.w3schools.com/aspnet/mvc_app.asp, ale powyższe komentarze wskazują, że nie jest to problem ze wskazówkami samouczka lub pojedyncza wersja VS.
To prawda, że możesz usunąć komunikat o błędzie , po prostu usuwając plik
@Scripts.Render("~/bundles/jqueryval")
wiersz z układów tworzenia / edycji, które zostały wygenerowane automatycznie przez program Visual Studio.
Ale to rozwiązanie nie rozwiązuje głównej przyczyny ani nie pozostawia w dobrym miejscu do zrobienia czegoś więcej niż ukończenia samouczka. W pewnym momencie (prawdopodobnie dość wcześnie) podczas tworzenia prawdziwej aplikacji będziesz chciał mieć dostęp do kodu walidacji jquery, który rozwiązanie do komentowania usuwa z Twojej aplikacji.
Jeśli używasz VS do tworzenia nowego modelu, tworzy on również zestaw pięciu plików widoku: Utwórz, Usuń, Szczegóły, Edytuj i Indeks. Dwa z tych widoków, Utwórz i Edytuj, mają na celu umożliwienie użytkownikowi dodawania / edytowania danych dla pól w rekordach bazy danych, które stanowią podstawę modelu. W przypadku tych widoków w prawdziwej aplikacji prawdopodobnie będziesz chciał przeprowadzić sprawdzanie poprawności danych za pomocą biblioteki sprawdzania poprawności jquery przed zapisaniem rekordu w bazie danych. Dlatego VS dodaje następujące wiersze
na dole tych dwóch poglądów, a nie innych. Automatycznie wygenerowany kod próbuje udostępnić bibliotekę walidacji dla tych widoków, ale nie dla innych.
Błąd występuje, ponieważ VS albo nie dodaje odpowiedniego wiersza do udostępnionego pliku _Layout.cshtml, albo, zobacz odpowiedź powyżej, dodaje go, ale pozostawia zakomentowany. Ta linia jest
@RenderSection("scripts", required: false)
Jeśli niektóre z twoich widoków mają sekcję skryptów (tak jak w przypadku tworzenia i edycji), w układzie musi być osadzone polecenie RenderSection. Jeśli niektóre skrypty mają tę sekcję, a inne nie (jak nie ma opcji Delete, Details i Index), polecenie RenderSection musi mieć
required: false
parametr.Dlatego najlepszym rozwiązaniem, jeśli chcesz zrobić coś więcej niż tylko przejście przez samouczek, jest dodanie instrukcji do _Layout.cshtml, a nie usuwanie kodu z widoków Edytuj i Utwórz.
PS Jest to trochę mylące, że to, co jest wymagane, znajduje się w „pakiecie”, a instrukcja wymagania wygląda tak, jakby próbowała dołączyć plik do folderu bundles, który nie istnieje w twoim projekcie. Jednak w przypadku kompilacji i samouczków do debugowania nie ma to znaczenia, ponieważ dołączone pliki są dołączane pojedynczo. Zobacz: http://www.asp.net/mvc/overview/performance/bundling-and-minification O kodzie, którego dotyczy niniejsza sprawa, wspomniano pokrótce w około dwóch trzecich w dół strony.
źródło
Podczas pracy z samouczkiem ASP.NET MVC 4 w programie Visual Studio 2012 napotkałem ten sam błąd w sekcji „Uzyskiwanie dostępu do danych modelu z kontrolera”. Poprawka jest dość prosta.
Podczas tworzenia nowej aplikacji internetowej ASP.NET MVC 4 w programie Visual Studio 2012 w dokumencie _Layout.cshtml w folderze współdzielonym sekcja „scripts” jest komentowana.
Po prostu usuń komentarz w wierszu, a przykładowy kod powinien działać.
źródło
Mam ten sam problem podczas wdrażania samouczka dla początkujących użytkowników MVC. Otrzymałem różne sugestie, aby zmodyfikować @RenderSection w twoim pliku layout.cshtml, ale nie użyłem go.
Dużo szukałem, a potem stwierdziłem, że tag skryptu wygenerowany w (View / Edit.cshtml) i inny plik cshtml nie renderuje się
} **
Usunąłem więc te linie i aplikacja zaczęła działać płynnie.
źródło
Skomentowałem również ** @ section Scripts, że działa płynnie. :)
źródło
Szukałem błędu w sieci i trafiłem na tę stronę. Używam programu Visual Studio 2015 i jest to mój pierwszy projekt MVC.
Jeśli pominiesz symbol @ przed sekcją renderującą, otrzymasz ten sam błąd. Chciałbym się tym podzielić z przyszłymi początkującymi.
źródło
Wydaje mi się, że renderujesz swoją sekcję z sekcji @ w pliku _Layout, który odnosi się do częściowego widoku z sekcją @, tj. Sekcja @ została zagnieżdżona w sekcji @. W pliku _Layout usuń sekcję @ wokół renderowania.
źródło
Rozwiązałem ten problem, używając następujących,
źródło
Dla mnie problem był w moim _Layout.cshtml Mam RenderSection wewnątrz warunku
i moim zdaniem było to bezwarunkowe
więc niezależnie od tematu, dziecko dodawało stopkę. Ale w rodzicu, gdy motyw nie jest czerwony ani zielony, nie dodawał stopki ani nie był generowany wyjątek.
źródło
sprawdź pisownię i wielkie / małe litery terminu „”
kiedy kiedykolwiek piszemy @RenderSection ("name", required: false) upewnij się, że widok maszynki do golenia zawiera sekcję @ nazwę sekcji {}, więc sprawdź pisownię i wielkie / małe litery w tekście "" Prawidłowe w tym przypadku to "Skrypty"
źródło
Upewnij się, że w widoku została wpisana poprawna pisownia sekcji skryptów
prawda jest
jeśli wpisałeś
@section script{ //your script here}
to źle.źródło