Próbuję użyć ViewBag w mojej aplikacji, mam wszystkie najnowsze biblioteki DLL, najnowszą wersję MVC 3, ale nadal otrzymuję błąd:
„Nazwa„ ViewBag ”nie istnieje w obecnym kontekście”
Nawet odinstalowałem, a następnie ponownie zainstalowałem MVC 3, a mimo to nie ma zmian.
Nie wierzę też, że biblioteki DLL pojawiają się w GAC.
Jaki może być mój problem? Albo jak dodać dll do GAC?
dll
asp.net-mvc-3
gac
viewbag
efleming
źródło
źródło
Odpowiedzi:
Musisz dodać konfigurację Razor specyficzną dla MVC do pliku web.config. Zobacz tutaj: Rozszerzenia Razor HtmlHelper (lub inne przestrzenie nazw dla widoków) nie znaleziono
Użyj narzędzia do aktualizacji MVC 3, aby automatycznie upewnić się, że masz odpowiednie wartości konfiguracyjne.
źródło
~/Views
lokalizacją, skopiuj również~/Views/Web.config
do tej lokalizacji.Miałem ten sam problem. Okazało się, że brakowało mi
./Views/Web.config
pliku, ponieważ utworzyłem projekt z pustej aplikacji ASP.NET zamiast korzystać z szablonu ASP.NET MVC.W przypadku ASP.NET MVC 5
./Views/Web.config
plik waniliowy zawiera następujące elementy:<?xml version="1.0"?> <!-- https://stackoverflow.com/a/19899269/178082 --> <configuration> <configSections> <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> </sectionGroup> </configSections> <system.web.webPages.razor> <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.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> <appSettings> <add key="webpages:Enabled" value="false" /> </appSettings> <system.web> <httpHandlers> <add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/> </httpHandlers> <!-- Enabling request validation in view pages would cause validation to occur after the input has already been processed by the controller. By default MVC performs request validation before a controller processes the input. To change this behavior apply the ValidateInputAttribute to a controller or action. --> <pages validateRequest="false" pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> <controls> <add assembly="System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" /> </controls> </pages> </system.web> <system.webServer> <validation validateIntegratedModeConfiguration="false" /> <handlers> <remove name="BlockViewHandler"/> <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" /> </handlers> </system.webServer> </configuration>
Dodanie
./Views/Web.config
pliku zawierającego tę zawartość rozwiązało ten problem.źródło
<add namespace="System.Web.Optimization"/>
Spróbuj wyczyścić i odbudować. W moim przypadku zadziałało.
źródło
Miałem ten sam problem w rozwiązaniu, które zostało zaktualizowane do MVC 5 w Visual Studio 2015.
W pliku web.config w folderze Views (nie w katalogu głównym web.config) zaktualizowałem numer wersji, o którym mowa w
<configSections>
od2.0.0.0
do3.0.0.0
.<configuration> <configSections> <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> </sectionGroup> </configSections>
źródło
Po wypróbowaniu różnych rzeczy okazuje się, że była to pamięć podręczna VS. Możesz rozwiązać ten problem, usuwając pliki pamięci podręcznej znajdujące się w:
Zamknąłem projekt, usunąłem pliki w tej ścieżce i ponownie otworzyłem projekt, wyczyściłem rozwiązanie i ponownie je zbudowałem, a problem został rozwiązany
Pliki zostaną ponownie utworzone po następnym uruchomieniu programu Visual Studio
źródło
%LOCALAPPDATA%\Microsoft\VisualStudio\14.0\ComponentModelCache
Miałem ten sam problem i crimbo dało mi właściwą wskazówkę, było to spowodowane przez plik ./Views/Web.config, który był obecny, ale nie zawierał odpowiednich przestrzeni nazw, jak sądzę ...
Utworzyłem pusty projekt MVC5 i zaimportowałem jego ./Views/Web.config do mojego istniejącego projektu, a czerwone fale pod każdym użyciem ViewBag zniknęły!
źródło
Jeśli używasz programu Visual Studio 2013 i lubisz używać MVC 3, pojawia się ten błąd, ponieważ program Visual Studio 2013 nie obsługuje natywnie MVC 3 (nawet jeśli zmienisz ./Views/web.config), tylko MVC 4: https: // msdn .microsoft.com / en-us / library / hh266747.aspx
źródło
Miałem
./Views/Web.Config
plik, ale ten błąd wystąpił po opublikowaniu strony. Okazuje się, że właściwość akcji kompilacji w pliku została ustawiona naNone
zamiastContent
. Zmieniam to naContent
dozwolone publikowanie, aby działało poprawnie.źródło
Miałem ten problem po zmianie domyślnej przestrzeni nazw aplikacji w oknie dialogowym Właściwości.
./Views/Web.Config zawierało odniesienie do starej przestrzeni nazw
źródło
W moim przypadku zmiana strony: Wersja na odpowiednią wartość rozwiązała mój problem, dla mnie poprawna wartość to (2.0.0.0 zamiast 3.0.0.0):
<appSettings> <add key="webpages:Version" value="2.0.0.0"/> <add key="webpages:Enabled" value="false"/>
źródło
Po wypróbowaniu wszystkich podejść żadne z nich nie działało dla mnie, ponieważ wszystko, co mam, to poprawne konfiguracje. Wreszcie
Usunięcie wszystkich plików z „temp” i „% temp%” z systemu pomogło rozwiązać ten problem.
Otwórz polecenie Uruchom (Windows + R) i wpisz powyższe ciągi i usuń wszystkie pliki tymczasowe.
źródło
Jeśli wypróbowałeś wszystkie dostępne odpowiedzi i nadal nie możesz znaleźć odpowiedzi, może to rozwiązać problem. Jeśli masz różne konfiguracje rozwiązań, takie jak debugowanie, wydanie itp., Ustaw ścieżkę wyjściową projektu na „bin” i skompiluj projekt. Przywróć zmianę po kompilacji.
VS szuka bibliotek dll w folderze bin
źródło
Próbowałem już usunąć plik bin i obj i ponownie uruchomić VS, ale nie miałem szczęścia.
Miałem też ten problem wiele razy i za każdym razem jest to trudne do rozwiązania. Często jest to spowodowane tym, że plik web.config nie ma poprawnej wersji jednego z odnośników. Oznacza to, że kliknij odwołanie w programie Visual Studio, aby wyświetlić wersję na karcie właściwości, a następnie dopasuj ją do wersji w plikach web.config.
Innym sposobem jest (jeśli to możliwe) uaktualnienie do nowszej wersji platformy .NET Framework, a następnie usunięcie plików bin / obj i ponowne uruchomienie programu Visual Studio. Mogę tylko założyć, że zmienia coś w
Szybkie sprawdzenie różnicy między plikiem csproj w rzeczywistości nie pokazuje żadnej większej różnicy ... Ale różnice, które pokazał, były następujące (dodałem (usunąłem), aby pokazać starą linię)
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> (remove) <Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>(remove) <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
W pliku Web.Config (nie tym w widoku)
<add key="webpages:Version" value="2.0.0.0" /> (remove) <add key="webpages:Version" value="3.0.0.0"/>
Dodał również (do tego samego pliku web.config), ale ręcznie go usunąłem
<system.codedom> <compilers> <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"/> <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+"/> </compilers> </system.codedom>
Na koniec w konsoli Menedżera pakietów dodaj
update-package
Uruchom witrynę lokalnie i zobacz wszelkie błędy kompilacji, które zostały naprawione przez mój drugi akapit (pasujące do wersji odniesień)
źródło
Zaktualizowałem strony internetowe: Wersja w folderze ./Views/Web.Config, ale to ustawienie było również obecne w web.config w katalogu głównym. Zaktualizuj oba lub usuń z katalogu głównego web.config
źródło
Jak już wspomniał @Wilson Vallecilla. Wykonaj poniższe czynności, aby usunąć pamięć podręczną:
Aby znaleźć pliki, postępuj zgodnie z poniższą ścieżką:
C:\Users\your.name.here\AppData\Local\Microsoft\VisualStudio\14.0\ComponentModelCache
Zamknąłem projekt, usunąłem pliki w tej ścieżce i ponownie otworzyłem projekt, wyczyściłem rozwiązanie i ponownie je zbudowałem, a problem został rozwiązany
Pomocne jest również usunięcie tymczasowych plików ASP.NET. C: \ Users \ your.name.here \ AppData \ Local \ Temp \ Temporary ASP.NET Files.
To działa dla mnie.
Dzięki!
źródło
W przypadku MVC5 na wypadek, gdybyś tworzył aplikację od podstaw. Musisz dodać plik web.config do folderu Views i wkleić w nim następujący kod.
<?xml version="1.0"?> <configuration> <configSections> <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> </sectionGroup> </configSections> <system.web.webPages.razor> <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.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> </configuration>
Zauważ, że w przypadku MVC 3 będziesz musiał zmienić wersję na 3.0.0.0 o godz
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
Aby zobaczyć zmiany, konieczne może być zamknięcie i ponowne otwarcie strony * .cshtml.
źródło