Nazwa „ViewBag” nie istnieje w bieżącym kontekście - Visual Studio 2015


98

Znowu zaczynam programować w ASP.NET i napotkałem mały błąd w programie Visual Studio. Moje pliki .cshtml wyświetlają błędy podczas korzystania z kilku funkcji maszynki do golenia. Na przykład „Nazwa„ ViewBag ”nie istnieje w obecnym kontekście”. Oto zdjęcie:

zrzut ekranu problemu w programie Visual Studio 2015

Używam projektu demonstracyjnego. Projekt można znaleźć tutaj: https://github.com/Wintellect/Angular-MVC-Cookbook/tree/master/BasicProject

Przejrzałem kilka innych wątków i większość z nich sugeruje aktualizację pliku (ów) web.config. Te 2 pliki konfiguracyjne są już obecne, a ponieważ jest to dość popularne demo, zakładam, że ma w sobie całą wymaganą konfigurację. Oczywiście przejrzałem te pliki konfiguracyjne i rzeczywiście zawierają one sugerowane rozwiązania.

Inne szczegóły:

  • Użyłem już clean & rebuild na rozwiązaniu, ale to nic nie zmieniło.
  • Kiedy tworzę zupełnie nowy projekt MVC, to działa
  • Mój przyjaciel ma ten sam problem i oboje używamy VS 2015 i Windows 10
  • Nadal mogę uruchomić aplikację i działa.

Z góry dziękuję.


Gdy nadal działa, jest to tylko błąd w kompilatorze działającym w tle. Spróbuj usunąć plik <Projectname> .suo.
Henk Holterman

który projekt prowadzisz? podstawowe? crud, routing?
Prashant Ghimire

1
@Henk niestety to nie zadziałało.
Michjuh

@Prashant Wypróbowałem zarówno projekt podstawowy, jak i projekt routingu. Problem występuje w obu z nich.
Michjuh

Czy rozwiązałeś to? Miałem ten sam problem @Michjuh
Burk

Odpowiedzi:


124

Miałem ten problem pomimo poprawnej konfiguracji.

Okazało się, że w pamięci podręcznej składników znajdują się złe pliki, które uniemożliwiły widokom Razor rozpoznanie ViewBag, Model i HtmlHelpers . Usunięcie tych plików rozwiązało problem (dobre wersje tych plików zostały utworzone następnym razem, gdy otworzyłem Visual Studio).

Pliki znajdują się tutaj:

%LOCALAPPDATA%\Microsoft\VisualStudio\14.0\ComponentModelCache

Usuń wszystkie cztery pliki:

  • Microsoft.VisualStudio.Default.cache
  • Microsoft.VisualStudio.Default.catalogs
  • Microsoft.VisualStudio.Default.err
  • Microsoft.VisualStudio.Default.external

Później widziałem ten sam problem na kilku innych komputerach programistów i ta poprawka szybko go rozwiązuje.


9
Wspaniale, to rozwiązało problem. Zauważyłem również, że pomaga również usunięcie tymczasowych plików ASP.NET. C: \ Users \ twoja.nazwa.here \ AppData \ Local \ Temp \ Temporary ASP.NET Files
Kevin

Dla mnie to też była poprawka. Dzięki za wiadomość!
Caverman

To rozwiązało mój problem spowodowany uaktualnieniem .net 4 do 4.5.2 i uaktualnieniem mvc 3 do 5
Joe Phillips

Mój problem polegał na tym, że właściwości mojego modelu nie były rozpoznawane. Ta poprawka natychmiast rozwiązała mój problem.
jkerak

5
mój folder to 15.0_7e8de76c \ ComponentModelCache for VS 2017.
Kevin .NET,

40

Zaktualizuj numery wersji w ustawieniach web.configpliku w folderze Widoki.

 <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

Jeśli zaktualizowałeś wersję MVC za pomocą nuget, powinna być:

 <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

Inne wersje zależności mogą również wymagać aktualizacji. Problemy z kompilacją i przestrzenią nazw w widokach dla pomocników i obiektów MVC są zwykle związane z błędnymi web.configplikami w folderach widoku.


9
U mnie to zadziałało, chociaż musiałem wprowadzić numer wersji 5.2.0.0 zamiast 5.2.2.0. Możesz zobaczyć, jaką masz wersję, przechodząc do Odwołania> System.Web.MVC i wybierając Właściwości. Dzięki za pomoc
user2233949

@ user2233949, @Benjamin Używam wersji MVC 4.0.0.0, widziałem to z właściwości. Co powinno być naprawione w moim przypadku?
Zeeshan

Sprawdź wszystkie swoje pliki web.config i upewnij się, że wszystkie używają poprawnej wersji hosta. Czasami, gdy nadpisujesz ustawienia w folderach przeglądanych, problem może zniknąć bez naprawy.
Benjamin Anderson

1
Wypróbowałem wszystkie inne sugestie, ale ta działała dla mnie przy użyciu 5.2.3.0. Dzięki Benjamin
Mitch

1
To była dla mnie poprawna odpowiedź. Również po zmianie web.config, nie zapomnij, aby zamknąć wszystkie swoje *.cshtmli *.vbhtmlpliki, a czyste i odbudować rozwiązanie. VS 2019 16.1.2
Štěpán Havránek

22

Znajdź „strony internetowe: wersja” w ustawieniach aplikacji i zaktualizuj ją do wersji 3.0.0.0. Mój web.config miał

<add key="webpages:Version" value="2.0.0.0" />

i zaktualizowałem go do

<add key=”webpages:Version value=”3.0.0.0 />


Należy to zaktualizować w obu wersjach pliku Web.config, katalogu głównym projektu i plikach Web.config dowolnego obszaru.
Sonu K

Dziękuję Ci. W moim przypadku problematyczne tagi znajdują się w <configuration> - <configSections> - <sectionGroup name = "system.web.webPages.razor"> Muszę zmienić <sectionGroup name = "system.web.webPages.razor">, <section name = "host"> i <section name = "pages"> do użycia Version = 3.0.0.0
Hong,

Usunięcie pamięci podręcznej w dowolnym miejscu (w tym Temporary ASP.NET Files) nie pomogło, ale ta odpowiedź pomogła .
cokolwiek

Co to ustawienie nawet na myśli ? Czemu to odpowiada? Jak określić, na której wersji aplikacji polegasz?
jpmc26

18

Przypadkowo usunąłem się web.configz Viewsfolderu, myśląc, że to niepotrzebne. Kiedy go odłożyłem, zaczęło działać.


13

Po wypróbowaniu wszystkiego pod słońcem, okazuje się coś zmodyfikował mój System.Web.WebPages.Razor <sectionGroup>in /Views/Web.Configz właściwego CamelCase System.Web.WebPages.Razordo wszech małymi literami system.web.webpages.razor, które ostatecznie był mój upadek.

Mając nadzieję, że to może pomóc innej biednej duszy w rozwiązaniu tego problemu ...

Dla porównania, to jest poprawny wpis (dla mojego scenariusza)

<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"> 

3
Mój był mały, ale nie rozwiązał mojego problemu.
Paul Totzke,

Święty karp. To był także mój upadek. Nie mogę uwierzyć, że to odkryłeś, @jbwedtech.
Luke Puplett

Ja też miałem je w małych literach, a zmiana obudowy nie rozwiązała problemu.
Andy Brown

5

Czasami nie wystarczy zmienić numerów wersji w ustawieniach pliku web.config. Ten problem występuje, ponieważ program Visual Studio 2015 nie ma narzędzi MVC4.

Rozwiązaniem jest aktualizacja projektu do wersji MVC 5. To całkowicie rozwiązuje problem. Możesz uzyskać pomoc na tej stronie. To jasno to wyjaśnia.

http://www.asp.net/mvc/overview/releases/how-to-upgrade-an-aspnet-mvc-4-and-web-api-project-to-aspnet-mvc-5-and-web- api-2

Nawiasem mówiąc, zespół Visual Studio zadeklarował, że doda obsługę mvc4 do Visual Studio 2015 przy pierwszej aktualizacji.


5

Wielokrotnie napotykałem ten problem i w końcu odkryłem, że tak się stało, ponieważ folder widoków powinien go zawierać, to własna konfiguracja sieciowa


2
Ale co powinno być w tym pliku web.config? Czy nie powinien być generowany automatycznie? (aktualizacja) Znalazłem, co powinno mieć i jak jest generowane stackoverflow.com/questions/29305914/ ...
drzaus

Tak, masz rację, w moim projekcie Web.Config wcześniej nie istniał (tak, powinien generować się automatycznie, ale wziął projekt od poprzedniego programisty, nie wiem, dlaczego go usunął). Po dodaniu pliku Web.Config dla folderów widoków zadziałało.
user3559462

2

późno do gry, ale żadne z tych rozwiązań nie zadziałało.

Po uaktualnieniu do VS 2017 strona działała, ale kompilator Visual Studio zepsuł większość plików .cshtml

TLDR;

mysolution.sln miał niewłaściwą wersję

sln diff

więc chcesz utworzyć nowe rozwiązanie z nowszym VS i porównać je z twoim i skopiować informacje o wersji.

pełne kroki aktualizacji:

  1. upewnij się, że plik .sln ma poprawną wersję dla VS
  2. kliknij prawym przyciskiem myszy MySolution w VS> Menedżer Nuget> Aktualizacje> uruchom wszystkie aktualizacje
  3. kliknij prawym przyciskiem myszy MySolution w VS> Aplikacja> zaktualizuj platformę docelową (w moim przypadku 4.5.2)
  4. napraw wszelkie problemy z wersjami w plikach .config (np. RAZOR do 3.0.0.0)
  5. napraw wszelkie problemy z kodem w kompilatorze (dla mnie ForEach było niejednoznaczne)

Mój projekt rozpoczął się w VS2013, kiedy trafiłem na VS2017, zacząłem widzieć te błędy, ale wszystko się skompilowało, więc próbowałem dowiedzieć się, co się dzieje, ale nie za mocno. Stawał się problemem, ponieważ otwieranie widoku powodowało dużą liczbę błędów. Jestem teraz na VS2019 i natknąłem się na twoją poprawkę; rządzisz! Mój .sln miał 14.0.25123.0 i miał być 16.3.9. Naprawiłem również wszelkie problemy z wersją frameworka. Nie musiałem aktualizować pakietów NuGet (na szczęście), ponieważ nie mam czasu na pełne przetestowanie wszystkich aktualizacji.
DaBlue

1

Zmarnowałem na to dużo pracy. Próbowałem wszystkiego w tym (i innych) postach, ale bezskutecznie. W końcu stwierdziłem, że muszę otworzyć projekt w inny sposób. Właśnie zaktualizowałem istniejącą witrynę internetową do Visual Studio 2015, MVC5, .NET framework 4.5.2 i używam systemu Windows 10, ale podejrzewam, że odpowiedź byłaby taka sama dla innych wersji każdej aplikacji.

Oto opcja menu, którą wybrałem, aby otworzyć stronę internetową:

wprowadź opis obrazu tutaj

Zamiast tego otworzyłem plik csproj definiujący projekt za pomocą tej opcji menu:

wprowadź opis obrazu tutaj

Wtedy miałem opcję „czystego rozwiązania”, do której odnosi się wiele innych osób:

wprowadź opis obrazu tutaj

Jednak nawet tego nie potrzebowałem - wszystko po prostu działało! Cóż, w każdym razie przeszedłem do następnego zestawu problemów ...


1

Dodałem kontroler wg

  • Krok 1: Dodaj> Klasa
  • Krok 2: UserController
  • .
  • .
  • .

utworzono odpowiedni kod:

namespace SampleApp.Controllers
{
    public class UserController {
    }
}

Moje błędy zostały zmienione, zmieniając Krok 1 na:

  • Krok 1: Dodaj> Kontroler
  • Krok 2: Kontroler użytkownika
  • .
  • .
  • .

utworzono odpowiedni kod:

namespace SampleApp.Controller {
    public class UserController : Controller {
    }
}

Problem polegał na tym, że nie odziedziczyłem klasy po kontrolerze

Uwzględniono inne komunikaty w moim błędzie - wszystkie pochodziły z tego problemu:

błąd CS0117: „ModelState” nie zawiera definicji „IsValid”

błąd CS0103: nazwa „RedirectToAction” nie istnieje w bieżącym kontekście

błąd CS0103: nazwa „Widok” nie istnieje w bieżącym kontekście

błąd CS0103: nazwa „ViewBag” nie istnieje w bieżącym kontekście

błąd CS0103: nazwa „Json” nie istnieje w bieżącym kontekście

Mam nadzieję, że ta zmiana pomoże tym, którzy nie zwracali uwagi na pierwszych krokach.


1

Po wypróbowaniu co najmniej 90% każdego rozwiązania / triku na ten temat (i innych), w końcu go rozwiązałem! Spoiler alert, nie ma śladu logiki to tak zwane "rozwiązanie": Uruchomienie rozwiązania z zamkniętymi wszystkimi kartami w końcu zadziałało, gdy nic innego nie oszczędziłoby mi "ViewBag & Co nie istnieje w obecnym kontekście" ... Zostałeś ostrzeżony, bez cholernej logiki!

Mam nadzieję, że kiedyś komuś to pomoże ^^


1

W moim przypadku ten problem występował tylko na moim komputerze tylko dla jednego projektu. Mój projekt działał dobrze w VS2012, ale po otwarciu w VS2017 miał ten problem.

Głównym problemem dla mnie była pamięć podręczna. Mój projekt wskazywał na starsze wersje dll z pamięci podręcznej dla Razor i MVC i nie znajdował funkcji, które zostały dodane w nowszych wersjach, takich jak ViewBag. ViewBag został dodany w Razor w wersji 3, ale ponieważ miałem buforowany Razor w wersji 2, nie mógł znaleźć ViewBag (ale mógł znaleźć inne rzeczy, które były obecne w wersji 2). Jednak samo wyczyszczenie pamięci podręcznej, jak w zaakceptowanej odpowiedzi, nie rozwiązało mojego problemu. Musieliśmy zmienić pliki konfiguracyjne, aby powiedzieć „użyj wersji 3 zamiast 2” dla Razor i „użyj wersji 5 zamiast 4” dla MVC, a następnie zamknąć VS, usunąć pamięć podręczną, otworzyć projekt i odbudować. Potem wszystko zostało naprawione. Poniżej znajdują się bardziej szczegółowe instrukcje.

Oto sekwencja zmian, które pomogły mi rozwiązać problem:

  1. W folderze „Widoki” Web.config zmień wszystkie lokalizacje, w których
    • Wersja MVC jest ustawiona na 4.0.0.0 do 5.0.0.0
    • Wersja Razor jest ustawiona na 2.0.0.0 do 3.0.0.0

Oto te wiersze w moim przypadku:

<sectionGroup name="system.web.webPages.razor" type="... Version=3.0.0.0 ...">
    <section name="host" type="... Version=3.0.0.0 ..." .../>
    <section name="pages" type="... Version=3.0.0.0 ..." .../>
</sectionGroup>
...
<host factoryType="... System.Web.Mvc, Version=5.0.0.0 ..." />
...
<pages
    ...
    pageParserFilterType="... Version=5.0.0.0 ..."
    pageBaseType="... Version=5.0.0.0 ..."
    userControlBaseType="... Version=5.0.0.0 ...">
    <controls>
        <add assembly="... Version=5.0.0.0 ..." ... />
    </controls>
</pages>

(uwagi: 1) Twoje wersje mogą być inne, po prostu mówię, co należało zrobić w moim przypadku 2) Pominąłem kilka rzeczy z "..." dla zwięzłości 3) nawet jeśli masz wersję MVC podobną do 5.3.2.0 nadal powinieneś wprowadzić 5.0.0.0, to samo z wersją Razora - wprowadź wszystkie zera w 3.0.0.0)

  1. W głównym pliku konfiguracyjnym (tym na najwyższym poziomie) zmień webPages:versionz 2.0.0.0 na 3.0.0.0.

  2. Ta zmiana prawdopodobnie nie wpłynęła na rozwiązanie, ale nadal o tym wspomnę. Upewnij się, że <namespaces>sekcja folderu „Widoki” ma dokładnie taką samą zawartość jak główny plik .conifg w katalogu głównym projektu, na przykład:

<namespaces>
    <add namespace="System.Web.Helpers" />
    <add namespace="System.Web.Mvc" />
    <add namespace="System.Web.Mvc.Ajax" />
    <add namespace="System.Web.Mvc.Html" />
    <add namespace="System.Web.Optimization" />
    <add namespace="System.Web.Routing" />
    <add namespace="System.Web.WebPages" />
</namespaces>
  1. Na koniec zamknij VS. Usuń wszystkie pliki pamięci podręcznej w %LOCALAPPDATA%\Microsoft\VisualStudio\14.0\ComponentModelCache(lub jakiejkolwiek innej poprawnej ścieżce), tak jak sugeruje to (obecnie) zaakceptowana odpowiedź Fentona. Usuń także .scanplik, nawet jeśli nie jest wymieniony w tej odpowiedzi. Gdy skończysz, otwórz VS, wyczyść projekt i przebuduj go. Teraz wszystko powinno działać. U mnie to zadziałało.

0

Wyłączenie go i ponowne włączenie działało dla mnie. Możesz spróbować ponownie uruchomić program Visual Studio.


Brzmi jak żart, ale to wszystko naprawiło. wzruszając ramionami
Douglas Timms

0

Udało mi się rozwiązać ten problem, dodając następujący fragment u góry mojej strony .cshtml

@{ViewBag.Title = "Title";}

Po ponownej kompilacji udało mi się usunąć tę linię i błąd zniknął.


0

Miałem podobny problem z jednym z moich poglądów. W moim przypadku po prostu wyczyściłem rozwiązanie i próbowałem je odbudować i jego działanie.



0

Miałem ten sam problem. Wypróbowałem rozwiązanie Clean, Build and Rebuild, ale nie zadziałało.

Więc w końcu zrobiłem jak poniżej:

  1. Naciśnij klawisz Windows + R.
  2. Wpisz % temp%
  3. Naciśnij Enter
  4. Usuń wszystkie pliki (jeśli niewiele plików pozostanie przywróconych, żadnych problemów)

Mam nadzieję, że to zadziała również dla was.


0

Po uaktualnieniu jednej z aplikacji mojego klienta z ASP MVC 4 do ASP MVC 5, mieliśmy błędy projektantów związane z pomocnikami HTML i ViewBag na stronach cshtml.

Aby rozwiązać te problemy, wykonaj następujące czynności: Zainstaluj bibliotekę pomocników sieci Web Asp.NET z Nuget Otwórz plik Web.config projektu i zaktualizuj powiązania, jeśli nie zostały zaktualizowane podczas instalowania na przykład pakietów Nuget

<dependentAssembly>
  <assemblyIdentity name=”System.Web.Mvc publicKeyToken=”31bf3856ad364e35 />
  <bindingRedirect oldVersion=”0.0.0.0-5.2.2.0 newVersion=”5.2.2.0 />
</dependentAssembly>

Znajdź „webpages: Version” w ustawieniach aplikacji i zaktualizuj ją do wersji 3.0.0.0. Mój web.config miał

i zaktualizowałem go do

Uruchom ponownie program Visual Studio i odbuduj. Może być konieczne usunięcie folderu bin dla twojego projektu

Odwiedź to: https://lajak.wordpress.com/2014/11/16/asp-mvc-5-viewbag-does-not-exist-in-the-current-context/


-1

Po wypróbowaniu wszystkiego innego i poczułem się nieco sfrustrowany, zaktualizowałem platformę .NET w mojej aplikacji MVC5 z 4.5 do 4.5.2. Jakoś to rozwiązało mój problem. Mam nadzieję, że to pomoże.


-4

Rozwiązałem wymianę w web.config

 <add key="webpages:Enabled" value="false" />

z

 <add key="webpages:Enabled" value="true" />

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.