Rzucanie Razor View „Nazwa„ model ”nie istnieje w obecnym kontekście”


200

Po znaczącym refaktoryzacji w mojej aplikacji MVC 4 i Razor pokazuje ten błąd podczas debugowania widoków:

Nazwa „model” nie istnieje w bieżącym kontekście.

Oto obraźliwa linia kodu:

@model ICollection<DataSourceByActive>

Wiem, że użycie @modeljest prawidłowe.

Dlaczego to się dzieje? Jak mogę to naprawić?


Kluczem jest „w obecnym kontekście”. Gdzieś nawias klamrowy nie został otwarty ani zamknięty ... Więc twoje oświadczenie nie jest w kontekście, w którym myślisz, że tak jest.
Floris

1
Czy możesz dodać kod kontrolera wraz z przykładowym znacznikiem tego, co próbujesz zrobić?
scniro

Odpowiedzi:


244

Myślę, że zepsułeś plik web.config, który znajduje się w folderze Widoki.

Utwórz nowy projekt ukierunkowany na tę samą platformę .NET i skopiuj jego plik Views / web.config na jeden z bieżącego projektu. To rozwiąże twój problem.

Ponadto, jak skomentował Dudeman3000, jeśli masz obszary w projekcie MVC, one również mają Views\web.configpliki.


20
pamiętaj, że jeśli masz obszary w swoim projekcie MVC, wszystkie one również mają pliki Views \ web.config!
Dudeman3000,

6
Dziwne, że mój web.config w katalogu views był w porządku, ale web.config projektu miał wersję stron 2.0.0. Wykrywanie fałszywych błędów zniknęło, kiedy zrobiłem to 3.0.0.
William T. Mallard

43
This will fix your problem.To nie mialo miejsca.
Timwi

2
@AnirudhaGupta Ten w pytaniu.
Timwi

1
Skopiowałem prawidłowy plik web.config do mojego folderu Views, ale nie został on uwzględniony w projekcie.
Wildcat Matt

104

Upewnij się, że masz następujące informacje w witrynie Web.configi katalogu widoków Web.configw appSettingssekcji

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

W przypadku MVC5:

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

(I istnieje tylko w głównym Web.configpliku).


14
Dzięki! W przypadku MVC5 numerem wersji musi być 3.0.0.0. (I istnieje tylko w głównym pliku Web.config.)
xec

To jest prawidłowa odpowiedź, którą chciałbym powiedzieć, ponieważ wszędzie starałem się zmienić wersję nie, ale na koniec była to jedyna rzecz, która uniemożliwiała działanie brzytwy.
Shivam Chopra

6
To zadziałało dla mnie. Po tej zmianie musiałem ponownie uruchomić program Visual Studio, aby wszystko działało.
Ravvy

1
Miałem ten problem z MVC 5, problem polegał na tym, że klucz istniał, ale był kierowany na wersję 2.0.0.0zamiast 3.0.0.0. Zmiana rozwiązała problem. Dziękuję Ci!
vaindil

Użyłem tego i zadziałało, ale dodałem go tylko do widoków web.config. Intellisense pojawiło się zaraz po ponownym uruchomieniu VS.
Matt

48

Oto co zrobiłem:

  1. Zamknij Visual Studio
  2. Usuń plik SUO
  3. Uruchom ponownie Visual Studio

Plik .suo jest ukrytym plikiem w tym samym folderze, co plik rozwiązania .svn i zawiera Opcje użytkownika programu Visual Studio.


Tak, nie ma web.configpliku dla ASP.NET Coreaplikacji, więc to zadziałało dla mnie (dodałem także rozszerzenia dla ulepszonej inteligencji).
VMAtm

2
Nie musiałem nawet usuwać pliku SUO. Właśnie zamknąłem i otworzyłem Visual Studio.
Jim S

Visual Studio 2019: brak pliku suo, usunięcie .vsfolderu pomogło.
Štěpán Havránek

Dzięki .. zrobiło to dla mnie. Aplikacja .net Core 2.0 mvc
roblem

2
Visual Studio 2019 tutaj, zamknij i ponownie otwórz to dla mnie. Dzięki.
JordanGW,

26

Miałem ten sam problem, stworzyłem nowy projekt i skopiowałem pliki web.config zgodnie z zaleceniami Gupty, ale to nie rozwiązało problemu. Sprawdziłem odpowiedź Alexa i Liama, myślałem, że ten wiersz musiał zostać skopiowany z nowego pliku web.config, ale wygląda na to, że sam projekt nie miał tego wiersza (MVC5):

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

Dodanie wiersza do pliku views / web.config rozwiązało problem.


Dzieje się tak, jeśli uaktualniłeś z asp.net w wersji 4.0.0 do 4.5.1. W moim przypadku mój główny plik web.config wyświetlał strony: Wersja = 2.0.0.0, ale powinien to być 3.0.0.0. Aktualizacja tej wartości rozwiązała problem.
Veysel Ozdemir

15

Zmiana następującego wiersza w pliku web.config folderu widoku rozwiązała ten sam błąd.

Z

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

Do

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

1
To również działało dla mnie. Zaktualizowałem maszynę do golenia w celu obsługi C # 6, a MVC musiała również zaktualizować. Sprawdź System.Web.Mvcodniesienie do zespołu, aby potwierdzić, której wersji głównej potrzebujesz.
James Wilkins

Miałem ten sam problem. naprawienie wszystkich zestawów MVC, Razor itp. w web.config na x.0.0.0 sprawiło, że znów
działało

@JamesWilkins Nice, pracował dla mnie ty. Po prostu usuń plik .suo projektu i uruchom ponownie VS.

dobry chwyt! Napotkałem ten problem po aktualizacji z .NET Framework 4.0 do 4.6 i oczywiście wskazując na niewłaściwą wersję zestawu.
prashant

10

W moim przypadku niedawno zaktualizowałem z MVC 4 do MVC 5, co dość źle psuje web.config. Ten artykuł ogromnie pomógł.

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

Najważniejsze jest to, że musisz sprawdzić wszystkie odwołania do numerów wersji w plikach web.config i Views / web.config, aby upewnić się, że odnoszą się one do prawidłowych uaktualnionych wersji powiązanych z MVC 5.


1
Jeśli dokonałeś aktualizacji z MVC 4 do MVC 5, to jest odpowiedź na sprawdzenie. Dokładnie wskazuje problemy z wersjami, rozwiązał mój problem i istnieje niewielkie ryzyko, że cokolwiek zepsujesz.
R. Schreurs,

10

Zmiana na @Model z @model wykonała dla mnie pracę.

@model reprezentuje typ obiektu Model widoku. @Model reprezentuje obiekt View Model.


1
Chciałbym przestać o tym zapominać! Dzięki za przypomnienie!
Mike

1
Ile razy muszę szukać tego problemu, jest frustrujące .. Ale cieszę się, że jest to proste rozwiązanie!
Brendan Sluke

7

Znalazłem rozwiązanie. Jeśli chcesz zaktualizować wersję maszynki do golenia lub mvc 4 do 5, zmień niektóre linie.

Stary kod w Views / web.config

<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
  <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
  <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>

Zamieniono na

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

sectionGroup musi być także zmiana.


6

W moim przypadku przydatny jest następujący kod. Umieść poniższy kod w pliku Web.config w folderze Widoki.

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

Po zaktualizowaniu kodu należy wyczyścić i odbudować rozwiązanie. Mam nadzieję, że to ci pomoże!


5

Żadna z istniejących odpowiedzi nie działała dla mnie, ale znalazłem co zrobił dla mnie pracować porównując .csprojpliki różnych projektów. Poniższa ręczna edycja .csprojpliku XML rozwiązała dla mnie problem Razor-intellisense, być może może to pomóc komuś innemu, kto wypróbował wszystkie inne odpowiedzi bezskutecznie. Kluczem jest usunięcie wszelkich wystąpień <Private>False</Private>w <Reference>:

<ItemGroup>
  <Reference Include="Foo">
    <HintPath>path\to\Foo</HintPath>
    <!-- <Private>False</Private> -->
  </Reference>
  <Reference Include="Bar">
    <HintPath>path\to\Bar</HintPath>
    <!-- <Private>True</Private> -->
  </Reference>
</ItemGroup>

Nie wiem, jak się tam dostali lub co dokładnie robią, może ktoś mądrzejszy ode mnie może dodać tę informację. Byłem szczęśliwy, że w końcu mogłem rozwiązać ten problem.


Dzięki za sugestię, zadziałało to również dla mnie, z jakiegokolwiek powodu
Scherling

Pracowałem też dla mnie.
Alex,

To była jedyna opcja, która zadziałała w moim przypadku. Zmieniłem projekt vs2010 na 2019 i działałem jak urok. Po zapisaniu csproj starałem się odkomentować tagi jak oryginalny plik i nadal działa ...
jefissu

3

Z jakiegoś powodu mój plik web.config miał 0.0.0.0 w atrybucie oldVersion:

<runtime>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
      </dependentAssembly>
</runtime>

zmiana na 1.0.0.0 była rozwiązaniem:

  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0"/>
  </dependentAssembly>

3

Korzystałem z projektu MVC4 z Visual Studio 2019 - i okazało się, że VS 2019 nie obsługuje MVC 4 od razu po wyjęciu z pudełka. Musisz to zainstalować.

Kroki:

  • Otwórz instalator Visual Studio (Wyszukaj instalator Visual Studio w Windows)
  • Kliknij poszczególne elementy
  • Wpisz „mvc” w polu wyszukiwania
  • Sprawdź mvc4-box
  • Kliknij „Zmień” w prawym dolnym rogu

UWAGA: Wymagane do zamknięcia studia wizualnego

wprowadź opis zdjęcia tutaj


2

W moim przypadku problem polegał na tym, że po uaktualnieniu projektu z MVC 4 do MVC 5 jakoś przegapiłem zmianę wersji w Views / web.config:

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

Nadal miał starą wersję 2.0.0.0. Po zmianie wersji na 3.0.0.0 wszystko zaczęło działać poprawnie.

Ponadto, z powodu tego problemu, Visual Studio 2015 Community Edition zacząłby uderzać procesor (zużycie 30-40% w stanie bezczynności) za każdym razem, gdy otwierałem plik .cshtml.


2

Miałem ten sam problem podczas wdrażania w usłudze Azure App Service

W moim przypadku było tak, ponieważ ~ / Views / Web.config nie został uwzględniony w projekcie.

Działało w IIS Express, ale kiedy wdrożyłem lazur, dostałem ten sam błąd. Ponieważ nie został uwzględniony w pliku .csproj, nie został wdrożony.

Rozwiązaniem było upewnienie się, że ~ / Views / Web.config jest włączony do projektu.

Jeśli przejdziesz do eksploratora rozwiązań i klikniesz ikonę „Pokaż wszystkie pliki”, a następnie otworzysz Widoki, możesz zobaczyć tam niewłączony plik Web.config.

Dodaj, opublikuj ponownie, a Bob jest twoim wujem.


1

Dla mnie problemem była sprzeczna wersja .NET w jednej z bibliotek, które niedawno zaimportowałem. Biblioteka, którą zaimportowałem została skompilowana dla wersji 4.5.2, a witryna ASP.NET MVC zaimportowałem ją do docelowej wersji 4.5. Po ponownej kompilacji lib dla 4.5 strona się skompiluje.

Ponadto nie wystąpiły błędy kompilacji, ale problem został zgłoszony jako „ostrzeżenie”. Przeczytaj więc wszystkie ostrzeżenia, jeśli takie istnieją.


1

Aby rozwiązać ten problem, upewniłem się, że zaktualizowałem do najnowszej wersji MVC za pomocą NuGet i konsoli Menedżera pakietów.

Zainstaluj pakiet Microsoft.AspNet.Mvc-Wersja 5.2.4

Następnie zaktualizowano do najnowszej wersji Razor

Zainstaluj pakiet Microsoft.AspNet.Razor-Wersja 3.2.4

Następnie zmieniłem wszystkie pliki web.config, aby odzwierciedlić zmianę. Jak zobaczysz poniżej:

Upewnij się, że w głównym pliku web.config strona: wersja jest poprawna. Oto, gdzie można go znaleźć (zignoruj ​​inne klucze):

<configuration>
 <appSettings>
   <add key="webpages:Version" value="3.0.0.0"/>
   <add key="ClientValidationEnabled" value="true"/>
   <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
 </appSettings>
</configuration>

Następnie poszukaj innych wersji wymienionych w zestawach, sprawdź wersję zestawu z wersją biblioteki wymienioną w odniesieniach do projektu! Możesz nie potrzebować ich wszystkich.

<system.web>
    <compilation debug="true" targetFramework="4.6">
        <assemblies>
            <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add assembly="System.Web.Helpers, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add assembly="System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add assembly="System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        </assemblies>
    </compilation>
</system.web>

Runtime assemblyBinding powinien również pokazywać „newversion”, zobacz gdzie czyta NewVersion 5.2.4.0? Ale sprawdź także wszystkie pozostałe wersje.

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
       <dependentAssembly>
        <assemblyIdentity name="System.Web.Razor" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0-5.2.4.0" newVersion="5.2.4.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

NASTĘPNIE w sekcji Widoki Web.Config upewnij się, że Razor jest poprawną wersją:

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

I Lastlt jest sekcja Strony Widoki Web.Config

    <pages
    validateRequest="false"
    pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
    pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
    userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <controls>
        <add assembly="System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
      </controls>
    </pages>

1

jeśli weźmiesz ten problem bez żadnych zmian w projekcie tak jak ja, musisz zmienić swój web.config, który został umieszczony w folderze View. po prostu napisz nowy wiersz przez Enter lub Usuń pusty wiersz. następnie zapisz plik web.config i przebuduj. mój problem rozwiązany dzięki temu rozwiązaniu


0

Próbowałem dodać widok, który znajdował się poza moim folderem „Widoki” (tak mi się wydaje, żeby inaczej zorganizować kod), gdy miałem ten problem. Utworzenie widoku wewnątrz widoków (zgodnie z konwencją) rozwiązało go.


0

W moim przypadku brakowało @ na początku foreach

    @foreach (var item in Model)
    {
        <tr class="clickable-row">
            <td class="clickable-field">
                @Html.DisplayFor(modelItem => item.Label)
            </td>
            <td class="clickable-field hidden-xs">
                @Html.DisplayFor(modelItem => item.Value)
            </td>
        </tr>
    }

To jest ważne; Nie wiem, dlaczego zostałeś przegłosowany.
FlyingV

1
Ponieważ nie ma to nic wspólnego z pierwotnym pytaniem.
Ryan,

0

W moim przypadku przypadkowo usunąłem plik web.config z folderu Widoki. Dodałem go z powrotem i było OK.


-3

Rozwiązałem problem, używając @Modelzamiast tylko modelpodczas drukowania zmiennych.


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.