MVC3'te mevcut bağlamda 'model' adı mevcut değil


119

Bir projeye cshtml sayfası ekledim. Aşağıdaki beyanı eklemeye çalıştığımda bir hata alıyorum: "'model' adı mevcut bağlamda mevcut değil".

@model xyz.abc.SomeClass

Referansları kontrol ettim, hepsi yerinde. Görünüm klasörüne bir web.config ekledim, ancak bu sorunu çözmedi.

Eksik bir şey var mı?


MVC4 çözümü arıyorsanız, Adam'ın cevabı geçerli, ana web.config'inizden doğru sürüm numarasını bulmanız ve aynısını burada kullanmanız gerekir. MVC4 Görünümler Klasörü web.config, <ana bilgisayar> satırını eksikti ve kök web.config dosyasından bir tane kopyalıyordu (başka değerlere sahip olabilir, bu nedenle sizinkini kontrol edin) ve Görünümler'e koyuyordu. Ardından projeyi kapattık ve Visual Studio'da yeniden yükledik ve hile yaptı.
Farrukh Subhani

Yanıtlar:


238

Güncelleme: MVC'nin daha yeni bir sürümünü kullanıyorsanız aynı işlem geçerlidir, web.config <host>satırında doğru sürüm numarasını kullandığınızdan emin olun .

Ben de senin yaptığın şeyi yaşarken buldum ve biraz daha araştırdıktan sonra sorunun ne olduğunu anladım!

Görünümler klasörü için varsayılan MVC3 web.config'i eklemeniz gerekir. MVC3'te iki tane vardır: biri uygulamanızın kök dizininde ve biri de görünümler klasörü için. Bu, dahil edilen ad alanları için bir bölüme sahiptir. Sizinkinin şuna benzediğinden emin olun:

  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.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>

Yeni bir MVC3 projesi oluşturmanızı, ardından sizin için oluşturulan web.config dosyasını views klasörünüze kopyalamanızı öneririm.

Önemli Bunu yaptıktan sonra, dosyayı kapatıp yeniden açmanız gerekir. İşte bu kadar! İyileştirmek!


1
Bunu cevap olarak işaretleyemem ama bu benim de sorunumdu. Bu bölümleri web.config dosyasına eklemeyi unuttum.
Dave

Evet, keşke seninkini cevap olarak işaretleyebilseydim. Bu konuda bir süre takılıp kaldım (Razor'a ilk dönüştürme girişimim başarısız olduktan sonra pes ettim) ve bu baştan beri sorun oldu. Teşekkürler!
Brian Donahue

3
Benim için çalışmıyor. Ya da, en azından, bazen intellisense alıyorum ve bazen alamıyorum, tüm bu kümeler Görünümler klasöründeki web.config içinde olsa bile.
Tom Lianza

Çok teşekkür ederim! Günümü korudu!
Sergey

9
MAINweb.config dosyanızdaki en son sürüme (MVC 5 için) güncellediğinizden emin olun<add key="webpages:Version" value="3.0.0.0" />
Simon_Weaver

30

Sayfalarımı düzenlemek için yeni bir alan oluşturduğumda aynı sorunla karşılaştım. Yapım şuna benziyordu:

WebProject

- [] Areas
    - [] NewArea
        - [] Controllers
        - [] Views
- [] Controllers
- [] Views
    - Web.config
- Web.config

WebProject altındaki Görünümler klasöründe oluşturulan görünümler iyi çalıştı, ancak NewArea altında oluşturulan görünümler aşağıdaki hatayı attı:

Mevcut bağlamda 'model' adı mevcut değil.

Bunu düzeltmek için, WebProject altındaki Views klasöründeki web.config dosyasını NewArea'daki Görünümler klasörüne kopyaladım. Aşağıya bakınız.

WebProject

- [] Areas
    - [] NewArea
        - [] Controllers
        - [] Views
            - **Web.config**
- [] Controllers
- [] Views
    - Web.config
- Web.config

Buna rastladım çünkü bu yeni alanı klasörleri eklemek için Ekle -> Yeni Klasör'ü kullanarak manuel olarak oluşturdum. Projeye sağ tıklayıp Ekle -> Alan'ı seçmeliydim. Daha sonra Visual Studio, alanı doğru bir şekilde ayarlamakla ilgilenirdi.


2
+1 ... Bazı nedenlerden dolayı web.config'in dahil edilmediğini fark ettim, sorunumu çözmek için cevabınızı bulduğuma sevindim
pollirrata

2
Bunun eski olduğunun farkındayım, ama aslında bugün aynı problemi yaşadım, bu yüzden bu cevap için teşekkür etmek istedim. :)
Ricky Mutschlechner

Ben de aynı sorunu yaşadım ve benzer çözümü. Benim Views/Web.configbaşvuran edildi System.Web.Mvc.MvcWebRazorHostFactorysürüm 5.0.0.0 ve bir üçüncü taraf Alan referans v4.0 vardı ve görünümleri işbirliği ile. Ben set Views/Web.configgeri v4.0 ve her şey çalıştı.
Çekiçli Kodlar

Bu sorunu düzeltmeme yardımcı olan, Görünümler klasöründeki web.config dosyasının üzerine yazmakla ilgili özellikle sizin yorumunuzdu. Sadece içeriği tamamen aynı yapmak çılgınca bir nedenden dolayı işe yaramıyor. AAARRRGGGHHH! ;)
Ryan Vettese

Benim durumumda, yerel sürümü sunucu sürümüyle senkronize etmek için robocopy kullanıyorum, tüm web.config dosyalarını hariç tutuyorum. sunucu sürümünde web.config dosyası yoksa bu hata görünecektir.
Will Wu

11

Görüşleriniz, projeler arasında paylaşılan görünümlerin yeniden kullanılması için yararlı olan bir sınıf kitaplığı derlemesindeyse, o zaman Adam'ın önerdiği şeyi yapmak yeterli olmayabilir. Bununla bile hala sorunlarım vardı.

Bunu, projenizin kök dizinindeki web.config dosyanızda deneyin:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <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>
  </configSections>
  <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.Helpers" />
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.WebPages" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>
  <appSettings>
    <add key="webpages:Version" value="2.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="PreserveLoginUrl" value="true" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Helpers, Version=2.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=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
      </assemblies>
    </compilation>
    <pages>
      <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.Routing" />
        <add namespace="System.Web.WebPages" />
      </namespaces>
    </pages>
  </system.web>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true" />
    <handlers>
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer>
</configuration>

Ve bu, görünümler klasörünüzdeki web.config dosyasında:

<?xml version="1.0"?>

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

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

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

  <system.web>
    <httpHandlers>
      <add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
    </httpHandlers>
    <pages
        validateRequest="false"
        pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <controls>
        <add assembly="System.Web.Mvc, Version=4.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>

Bu benim için çalıştı. Artık intellisense'im var ve MVC dışı bir projedeki görüşlerimde daha sonra birden fazla MVC web sitesinden başvurabileceğim derleme hatası yok.


1
Bu, web projenizdeki web.config dosyaları için mi yoksa sınıf kitaplığınızdaki web.config dosyaları için mi?
TheJerm

7

Bu sorunla karşılaştım, yanlışlıkla görünüm dosyasının (About.cshtml) rota / about için bir kopyasını kök dizinde aldım. (Görünümler klasörü değil) Dosyayı kökünden taşıdığımda sorun ortadan kalktı.


1
Teşekkür ederim! Ben de aynı problem yüzünden çıldırıyordum ve cevap buydu ;-)
Rob

Güzel! Çıldırdığımı da hatırlıyorum. :)
James Lawruk

Kök dizindeki bir klasörde, yalnızca görünümlerimdeki klasörün başarısız olmasına neden olan bazı .cshtml dosyalarım vardı ... while (true) {bashHeadToWall; }. Teşekkürler.
matt.j.crawford

7

VS2012 ve VS2013 kullanırken benzer sorunlar yaşadım.
Ana web.config dosyasındaki <appSettings> öğesine aşağıdaki satırı eklemek işe yaradı:

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

Satır zaten oradaysa ancak 2.0.0.0 diyorsa, 3.0.0.0 olarak değiştirmek işe yaradı.


MVC yükseltmesi yaptıktan sonra da sorunum buydu. 2.0.0.0 dedi, 3'e geçtikten sonra çalıştı.
FerX32

6

Güncelleme: 5/5/2015 MVC 5 projeniz için /views/web.config dosyanızda Sürümü 5.0.0.0 olarak ayarlamanız gerekir.

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

1
Yup, soruna neden olan 5.2.0.0 sürümünü buldu ancak 5.0.0.0 olarak değiştirmek sorunu çözdü !!! Teşekkürler.
vendettamit

5

Modeli şu şekilde kod kullanarak görünümün en üstünde bildirirken:

@model MyModel

referanslarınızı aşağıda büyük harfle yazmanız gerekir, örneğin:

@Html.Encode(Model.MyDisplayValue)

Görünümler klasöründeki eksik bir web.config'in bunun ana nedeni olacağına inanıyorum, ancak bu düzeltildiyse ve sorun devam ederse, kaynakta başvurmak için modeli değil Model'i kullandığınızı kontrol edin .


1
Bu, örneğin lambda ifadelerine dayanmayan kendi yardımcınızı oluşturduğunuzda olduğu gibi, görünümde kendi kodunuzda modelinize başvurmaya çalıştığınız zaman hatayı çözer
JohnC

3

Ben de bu problemle karşılaştım. Koşullarım biraz farklıydı.

  1. Görünüm klasörlerimden biri yanlışlıkla projemin kök dizinine taşındı. Bu, daha project_root/SignUp/ViewNameönce rota eşleştirmesine yol açar project_root/Views/SignUp/ViewName. Bu @modelhataya neden oldu .

  2. Görünümleri uygun konuma geri taşıdıktan sonra, dizin bir şekilde proje kökünde yeniden oluşturuldu. Bu sefer boş. /SignUp/ViewNameçalıştı, ancak /SignUp/bir 403 - Forbidden: Access is denied.hata verdi. Tüm klasör proje kökünden kaldırılmalıdır.

Umarım bu birine yardımcı olur. Sorunun MVC 3'ten MVC 4'e en son yükseltmemizden kaynaklandığına inandığım için saatler harcadım. Sadece bir not: Yükseltme sorunları yalnızca MVC 2 ve MVC 3 arasında meydana gelmelidir. Bu sorunu sonraki sürümlerde görürseniz, muhtemelen bunun nedeni Yükselt.


2

Bu sorunu çözmek yaşlarımı aldı, ancak sonunda umarım MVC'de çözmüşümdür, bu da benzer:

ASP.NET 4.5'i yeniden yükledim ( http://www.asp.net/downloads )

Http://www.asp.net/whitepapers/mvc4-release-notes adresindeki yükseltme eğitimini takip ettim

AMA bahsedilen bu paragraf benim için yanlış

System.Web.Mvc, Version=4.0.0.0
System.Web.WebPages, Version=2.0.0.0
System.Web.Helpers, Version=2.0.0.0
System.Web.WebPages.Razor, Version=2.0.0.0

System.Web.Razor içinde Razor olduğundan , jilet ad alanını System.Web.Razor olarak değiştirdim.

Bunu web.config dosyanıza ekleyin

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

Montaj referansını yukarıdaki tüm montajlara ekledim

ProjectTypeGuids öğesini bulun ve {E53F8FEA-EAE0-44A6-8774-FFD645390401} yerine {E3E379DF-F4C6-4180-9B81-6769533ABE47} yazın.

Hepsi bu.


1
webconfig'e appsettings eklenmesi sorunu benim için çözdü. <add key="webpages:Version" value="2.0.0.0" />İtici faktör olduğunu düşünmeme rağmen , diğer ayara gerek yok.
Ayakkabı

1
MVC 5 için bunun olması gerekiyor 3.0.0.0ama evet bu çok önemli!
Simon_Weaver

2

Bu korkunç bir hata ama:

Emin sahip olun Web.config sizin dosyaları Görünüm at Uzaktan . Belki Ftp programınızın filtreleri ile yüklemeyi atladınız.


2

Alanlar / Alanım / Görünümler / web.config altında web.config eksikti. Bir kez eklendiğinde iyi çalıştı. Bu, MVC 5 ve .NET4.5 ile yapıldı.


Benimki de eksikti, bu sitenin yardımıyla tekrar çalıştırdım. forums.asp.net/t/…
Perposterer

0

Başka bir sebep daha var. Benim durumumda, bir index.cshtml dosyasını uzak sunucudan yedek olarak web kök klasörüne (Görünümler klasörünün dışına) kopyaladım.

Bu yüzden, /views/web.config'imi değiştirmeye devam ettim, /views/home/index.cshtml'mi değiştirmeye devam ettim ve hatalar devam etti ... Görünümler klasörünün dışındaki /index.cshtml'yi bulana kadar, sildi ve emin ol her şey normale döndü!


0

Aynı sorunla karşılaştım, ancak benim durumumda değişen tek şey, Visual Studio 2012'yi kaldırmış olmam ve Visual Studio 2013'ü yüklemiş olmamdı. Çözümümüzü açtım ama aynı şeyi almaya devam ettim The name 'model' does not exist in current context her Razor görünümünde hatayı .

İş arkadaşım VS2013 güncellemelerini kontrol etmeyi önerdi. VS2013 Güncelleme 1'i yükledikten sonra bu hatayı almayı bıraktım.


1
Bu hatayı VS2013 Güncelleme 2 ile alıyorum . Güncelleme 1 ile iyi çalışıyordu. Henüz bir çözüm bulamadım. Güncelleme 2'yi kaldırmaya çalıştım, ancak bu bir cshtml dosyasını açtıktan sonra VS'nin çökmesine neden oldu.
iheartcsharp

VS2013 Güncellemesi 2 ile aynı sorunu yaşıyorum.
EricP

0

Görünümler dizinindeki yapılandırma dosyanızı kontrol edin. MVC 4/5 için anahtar ekle


0

Nuget'i yeniden kurmak benim için çözdü

PM> Kurulum Paketi Microsoft.AspNet.Razor -Version 3.2.3


0

Benim için sorun buydu. Bütün bu blok bölümden eksikti.

  <assemblies>
    <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.Helpers, Version=2.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=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
  </assemblies>

0

Paketleri güncelledikten sonra da aynı sorunu yaşıyorum. Yukarıda bu konuda yazdığınız her şeyi yaptım, ancak model anahtar kelimesinin kırmızı temeli ortadan kalkmadı. Daha sonra çözüm bulundu: Projemin dizininden 'paket' klasörünü silip yeniden oluşturdum, bu arada NuGet'in eksik paketleri geri yüklemesine izin verdi. Yenilendi ve bitti!



0

Aynı sorunla karşı karşıyaydım ve sonra bir çözüm buldum. Çözüm şudur:

  1. Visual Studio'yu kapatın
  2. SUO dosyasını silin
  3. Visual Studio'yu yeniden başlatın

.Suo dosyası aynı klasörde gizli bir dosyadır .svn çözüm dosya var. Umarım işe yarar!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.