Właśnie utworzyłem projekt ASP.NET MVC 4 i użyłem programu Visual Studio 2012 RC do utworzenia widoków kontrolera i żyletki Index
oraz Create
akcji.
Gdy przyszedłem uruchomić aplikację i przejrzałem Create
widok, pokazany został następujący błąd:
Komunikat o błędzie kompilatora: CS0103: Nazwa „Skrypty” nie istnieje w bieżącym kontekście
Problemem jest następujący kod, który został dodany automatycznie na dole Widoku:
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
Dlaczego skrypty nie istnieją?
Spojrzałem na podstawową klasę strony internetowej w asemblerze System.Web.Mvc.dll, v4.0.0.0
Widzę następujące właściwości pomocnika:
- Ajax
- HTML
- URL
Ale nic nie nazywa Skryptów.
Jakieś pomysły?
EDYTOWAĆ:
Mój plik Web.config wygląda następująco (nietknięty od tego, który utworzył Visual Studio):
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
</namespaces>
</pages>
</system.web.webPages.razor>
EDYCJA 2:
Ludzie blogują na temat korzystania z @Scripts
pomocnika:
Jednak po zainstalowaniu programu Visual Studio 2012 RC na nowej instalacji systemu Windows 8 nadal nie mogę go używać, @Scripts
mimo że program Visual Studio dodaje go do wygenerowanego widoku!
Rozwiązania są przedstawione poniżej.
Nie jestem pewien, jak to zamknąć, ponieważ ostatecznie wydawało się, że aktualizacja rozwiązała problem. Dokładnie sprawdziłem, czy wykonałem czystą instalację, używając nowego projektu. Ale ten sam nieudany projekt, który sprawiłem, że działa dobrze po różnych aktualizacjach i bez ręcznej oczywistej interwencji. Dzięki za wszystkie przemyślenia, ale wtedy zdecydowanie był problem;)
źródło
<system.web.webPages.razor> <pages pageBaseType=""> <add namespace="System.Web.Mvc" /> <add namespace="System.Web.Mvc.Ajax" /> <add namespace="System.Web.Mvc.Html" /> etc... </pages>
Odpowiedzi:
Kluczem tutaj jest dodanie
ZARÓWNO do plików web.config. Mój scenariusz był taki, że miałem odwołanie do System.Web.Optimization zarówno w projekcie, jak i głównym pliku web.config / root, ale @Scripts nadal nie działały poprawnie. Musisz dodać odwołanie do przestrzeni nazw do pliku widoków web.config, aby działał.
AKTUALIZACJA:
Od czasu wydania MVC 4 System.Web.Optimization jest już przestarzały. Jeśli zaczynasz od pustego rozwiązania, musisz zainstalować następujący pakiet nuget:
Nadal będziesz musiał odwoływać się do System.Web.Optimization w swoich plikach web.config. Aby uzyskać więcej informacji, zobacz ten temat:
Jak dodać odniesienie do System.Web.Optimization dla aplikacji MVC-3-przekonwertowanej na 4
Jak wielu zauważyło, ponowne uruchomienie VS może być wymagane po wykonaniu powyższych kroków, aby to zadziałało.
źródło
Install-Package Microsoft.AspNet.Web.Optimization
z pustego szablonu ASP.NET MVC4, ponieważ nie jest on domyślnie dołączony.@Styles
i@Scripts
są 2 nowymi pomocnikami dostarczonymi przezSystem.Web.Optimization
bibliotekę. Jak sama nazwa wskazuje, łączą i minimalizują odpowiednio pliki lub zasoby CSS i JavaScript.Spróbuj dołączyć przestrzeń nazw
System.Web.Optimization
albo przez@using
dyrektywę, albo przezweb.config
http://ofps.oreilly.com/titles/9781449320317/ch_ClientOptimization.html#BundlingAndMinificationAKTUALIZACJA
Microsoft przeniósł pakiet / minimalizację do osobnego pakietu o nazwie
Microsoft.AspNet.Web.Optimization
. Możesz pobrać zestaw z nuget .Ten post będzie ci przydatny.
źródło
System.Web.Optimization
nazw NIE jest przestarzała, takSystem.Web.Optimization.dll
jest.Z góry brakowało jednego małego kroku, który znalazłem w innym poście. Po dodaniu
do swoich
~/Views/web.config
przestrzeni nazw, zamknij i ponownie otwórz Visual Studio. Właśnie to musiałem zrobić, aby to zadziałało.źródło
Korzystam z obszarów i właśnie natknąłem się na ten problem, właśnie skopiowałem przestrzenie nazw z głównego pliku web.config do sieci obszarów. config i teraz działa !!
źródło
Miałem ten sam problem i użyłem WinMerge, aby pomóc mi to wyśledzić. Ale gdy go więcej zbadałem, okazało się, że Rick ma do tego idealny post na blogu .
Podsumowanie:
<add namespace="System.Web.Optimization"/>
do obu plików web.configInstall-Package -IncludePrerelease Microsoft.AspNet.Web.Optimization
źródło
Miałem ten sam problem:
Używana wersja System.Web.Optimization była przestarzała dla MVC4 RC.
Zaktualizowałem moje pakiety za pomocą menedżera pakietów w VS 2010.
W tym blogu MSDN pan Andy opowiada o tym, jak zaktualizować swój projekt MVC 4 Beta do MVC 4 RC. Aktualizacja moich pakietów spowodowała, że skrypty (szczególnie te do optymalizacji sieci) zostały dla mnie rozwiązane:
Aby zainstalować najnowszy pakiet System.Web.Optimization, użyj konsoli Menedżera pakietów (Narzędzia -> Menedżer pakietów biblioteki -> Konsola Menedżera pakietów) i uruchom następujące polecenie:
Użyj pliku System.Web.Optimization zawartego w pakiecie w swoich referencjach.
Aby zaktualizować inne pakiety: Menu Narzędzia -> Menedżer pakietów bibliotek -> Zarządzaj pakietami NuGet dla rozwiązania.
źródło
Utwórz nową aplikację internetową MVC 4 RC i uruchom ją. Przejdź do Login, który używa tego samego kodu
To, co umożliwia działanie Login.cshtml, to plik Views \ Web.config (nie wersja root aplikacji)
Dlaczego Twój widok Utwórz nie działa, a Logowanie jest?
źródło
Zaimportuj System.Web.Optimization na swój widok maszynki w następujący sposób:
źródło
Natknąłem się jednak na ten problem podczas uruchamiania polecenia:
Otrzymałem tajemniczą wiadomość (uwielbiam świetną kalambur przed pierwszą filiżanką kawy):
Używam tego w systemie Windows XP SP3 (nie z wyboru) i znalazłem, że musiałem postępować zgodnie z instrukcjami opublikowanymi przez użytkownika artsnob na forum ASP.NET
Po uruchomieniu tego mógłbym uruchomić wiersz poleceń, aby zaktualizować Web.Optimization.
Mam nadzieję, że to uratuje komuś kopanie.
źródło
Tylko napisz
źródło
Uaktualniłem z wersji beta do wersji RC i napotkałem problem „Skrypty” nie istnieją. Przeglądano całą sieć, a ostateczne rozwiązanie jest takie, jak powiedział N40JPJ, oraz kolejne obejście:
Skopiuj następujące w View \ Web.config:
oraz następujące w View \ Shared_Layout.cshtml
Mam nadzieję, że to pomoże.
źródło
if (IsSectionDefined())
chyba że podaszelse
klauzulę. Fakt, że mówiszrequired: false
już, pozwala nie zdefiniować tej sekcji, w takim przypadku sekcja zostanie pominięta. Jest to więc niepotrzebny dodatkowy kod.Najwyraźniej utworzyłeś typ projektu „Pusty” bez folderu „Skrypty”. Moja rada - stwórz projekt typu „Podstawowy” z pełnym folderem „Skrypty”.
W odniesieniu do wszystkich programistów.
źródło
po prostu usuń / ukryj kod z widoku Utwórz i edytuj brzytwę swojego kontrolera.
źródło
powodzenia...
źródło
Jeszcze jedno dla puli - spędzone wieki próbujące rozwiązać ten sam problem - nawet jeśli zostało to zdefiniowane w pliku web.config dla roota i roota Views. Okazuje się, że omyłkowo dodałem go do elementu
<system.web><pages><namespaces>
, a nie do<system.web**.webPages.razor**><pages><namespaces>
elementu.Naprawdę łatwo tego przegapić!
źródło
Kiedy wchodzę na stronę z tym kodem:
Wystąpił ten błąd: błąd. Podczas przetwarzania żądania wystąpił błąd.
A ten wyjątek jest rejestrowany w moich logach:
Wypróbowałem wszystkie wskazówki na tej stronie i żadna z nich nie została dla mnie rozwiązana. Więc spojrzałem na mój folder Packages i zauważyłem, że mam dwie wersje System.Web.Optmization.dll:
Mój projekt odwoływał się do starszej wersji beta. Zmieniłem tylko odniesienie do nowszej wersji (69 KB) i wszystko działało dobrze.
Myślę, że to może komuś pomóc.
źródło
To oczywiste rozwiązanie. Miałem ten sam problem później. Niepowiązane z odwołaniami do zespołu lub ... Będzie to miało miejsce w wywołaniu hierarchii widoków częściowych MVC, gdy masz skomplikowane struktury stron. Wywołanie / renderowanie każdej części osobno na każdej stronie (być może stronie wzorcowej lub częściowej) spowoduje, że nie zobaczą wymaganych części strony, takich jak poniższy kod:
To po prostu zmusza stronę do znalezienia i renderowania powiązanej sekcji, a w przypadku awarii wyświetla komunikat o błędzie, taki jak ty.
Sugeruję więc prześledzenie stron (np. Śledzenia programu) od głównego do wszystkich jego części, aby wykryć zależności . Może to okropna praca, ale nie ma tu innych możliwości.
Nie to, że z mojego doświadczenia wynika, że niektóre sytuacje warunkowe w programowaniu powodują, że problem nie pokazuje prawidłowego błędu.
źródło
Miałem ten problem po dodaniu obszaru do projektu, który go nie miał. Aby się go pozbyć, po prostu skopiowałem plik web.config z głównym folderem Widoki do folderu Widoki obszaru i zaczął działać.
źródło
Rozwiązuję ten problem w MvcMusicStore, dodając tę część kodu do _Layout.cshtml
i usuń ten kod z Edit.cshtml
Uruchom program inshallah będzie z tobą współpracować.
źródło
Dla mnie to rozwiązało problem, w konsoli menedżera pakietów NuGet napisz:
źródło
Kiedy ostatnio zacząłem używać MVC4, napotkałem powyższy problem podczas tworzenia projektu z pustymi szablonami. Kroki prowadzące do rozwiązania problemu.
TOOLS
->Library Package Manager
->Packager Manager Console
Wklej poniższe polecenie i naciśnij enterInstall-Package Microsoft.AspNet.Web.Optimization
Uwaga: poczekaj na pomyślną instalację.<namespace="System.Web.Optimization" />
Pakiet wymieniony w kroku 1 doda kilka bibliotek systemowych do odniesień do rozwiązania, takich jak System.Web.Optimization nie jest domyślnym odniesieniem dla pustych szablonów w MVC4.
Mam nadzieję, że to pomoże. Dziękuję Ci
źródło
Miałem bardzo podobny błąd podczas uaktualniania projektu z MVC3 do MVC4.
W moim przypadku miałem nieaktualne numery wersji w kilku moich Web.Configs.
Dawny:
Pamiętaj, aby przejrzeć Web.Configs w każdym z katalogów Views.
Możesz przeczytać więcej na temat aktualizacji projektu ASP.NET MVC 3 do ASP.NET MVC 4 .
źródło
Jeśli dodałeś do pliku web.config i nadal wyświetla komunikat, musisz zamknąć projekt i otworzyć go ponownie, teraz będzie istniał i @ Styles.Render („”) i @ Scripts.Render () będą działały dobrze.
źródło
Spróbuj tego:
źródło