Nama 'model' tidak ada dalam konteks saat ini di MVC3

119

Saya menambahkan halaman cshtml dalam sebuah proyek. Ketika saya mencoba untuk menambahkan deklarasi berikut, saya mendapatkan error: "Nama 'model' tidak ada dalam konteks saat ini".

@model xyz.abc.SomeClass

Saya memeriksa referensi, semuanya ada di tempatnya. Saya menambahkan web.config di folder view, tapi itu tidak memperbaikinya.

Apakah ada yang saya lewatkan?

pengguna602737
sumber
Jika Anda mencari solusi MVC4, jawaban dari Adam valid, Anda perlu menemukan nomor versi yang benar dari web.config utama Anda dan gunakan yang sama di sini. MVC4 Views Folder web.config kehilangan baris <host> dan menyalin satu dari root web.config (mungkin memiliki nilai lain yang berbeda jadi periksa milik Anda) dan letakkan di Views. Kemudian kami menutup proyek dan memuatnya kembali di Visual Studio dan berhasil.
Farrukh Subhani

Jawaban:

238

Pembaruan: Jika Anda menggunakan versi MVC yang lebih baru, proses yang sama berlaku, pastikan untuk menggunakan nomor versi yang benar di baris web.config <host>.

Nah, saya menemukan diri saya mengalami hal yang sama dengan Anda, dan setelah sedikit penelitian lebih lanjut, saya menemukan apa masalahnya!

Anda perlu menyertakan MVC3 web.config default untuk folder Tampilan. MVC3 memiliki dua: satu di root untuk aplikasi Anda, dan satu lagi untuk folder views. Ini memiliki bagian untuk ruang nama yang disertakan. Pastikan milik Anda terlihat seperti ini:

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

Saya sarankan Anda membuat proyek MVC3 baru, lalu salin web.config yang dibuat untuk Anda ke dalam folder views.

Penting Setelah Anda selesai melakukannya, Anda perlu menutup file dan membukanya kembali. Voila! Intellisense!

Adam Terlson
sumber
1
Saya tidak bisa menandai ini sebagai jawaban, tapi ini juga masalah saya. Lupa menambahkan bagian ini ke web.config.
Dave
Ya, kuharap aku bisa menandai milikmu sebagai jawabannya. Saya terjebak dalam hal ini untuk sementara waktu (menyerah setelah upaya pertama saya untuk beralih ke Razor gagal), dan ini adalah masalah selama ini. Terima kasih!
Brian Donahue
3
Tidak berhasil untuk saya. Atau, setidaknya, terkadang saya mendapatkan intellisense dan terkadang tidak, meskipun saya memiliki semua set ini di web.config di folder Views.
Tom Lianza
Terima kasih banyak! Itu mengamankan hari saya!
Sergey
9
pastikan untuk memperbarui ke versi terbaru (untuk MVC 5 di sini) di MAINfile web.config Anda<add key="webpages:Version" value="3.0.0.0" />
Simon_Weaver
30

Saya mengalami masalah yang sama ketika saya membuat area baru untuk mengatur halaman saya. Struktur saya terlihat seperti:

WebProject

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

Tampilan yang dibuat di folder Tampilan di bawah Proyek Web bekerja dengan baik, tetapi tampilan yang dibuat di bawah NewArea melontarkan kesalahan berikut:

Nama 'model' tidak ada dalam konteks saat ini.

Untuk memperbaiki ini saya menyalin web.config di folder Tampilan di bawah WebProject ke folder Tampilan di NewArea. Lihat di bawah.

WebProject

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

Saya mengalami ini karena saya membuat area baru ini secara manual menggunakan Add -> New Folder untuk menambahkan folder. Saya harus mengklik kanan proyek dan memilih Add -> Area. Kemudian Visual Studio akan mengurus pengaturan area dengan benar.

Paul Syfrett
sumber
2
+1 ... Saya baru saja memperhatikan bahwa karena alasan tertentu web.config tidak disertakan, senang saya menemukan jawaban Anda untuk menyelesaikan masalah saya
pollirrata
2
Saya menyadari ini sudah lama, tetapi saya sebenarnya memiliki masalah yang sama hari ini, jadi saya ingin mengucapkan terima kasih atas jawaban ini. :)
Ricky Mutschlechner
Saya memiliki masalah yang sama juga, dan solusi serupa. Saya Views/Web.configmereferensikan System.Web.Mvc.MvcWebRazorHostFactoryversi 5.0.0.0, dan saya memiliki referensi Area v4.0 pihak ketiga dan dengan pandangan yang bekerja sama. Saya mengatur Views/Web.configkembali ke v4.0 dan semuanya bekerja.
Kode dengan Hammer
itu secara khusus adalah komentar Anda tentang menimpa web.config dengan yang dari folder Views yang membantu saya memperbaiki ini. hanya membuat isinya persis sama tidak akan berhasil karena alasan yang tidak masuk akal. AAARRRGGGHHH! ;)
Ryan Vettese
Dalam kasus saya, saya menggunakan robocopy untuk menyinkronkan versi lokal dengan versi server, mengecualikan semua file web.config. tanpa file web.config dalam versi server, kesalahan ini akan muncul.
Akankah Wu
11

Jika pandangan Anda berada dalam rakitan perpustakaan kelas, yang berguna untuk penggunaan kembali pandangan bersama di antara proyek, maka hanya melakukan apa yang disarankan Adam mungkin tidak cukup. Saya masih memiliki masalah bahkan dengan itu.

Coba ini di web.config Anda di root proyek Anda:

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

Dan ini di web.config di folder views Anda:

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

Ini berhasil untuk saya. Saya sekarang memiliki kecerdasan dan tidak ada kesalahan kompilasi pada pandangan saya dalam proyek non-MVC yang kemudian dapat saya rujuk dari beberapa situs web MVC.

Greg Jackman
sumber
1
Apakah ini untuk file web.config di proyek web Anda, atau file web.config di perpustakaan kelas Anda?
theJerm
7

Saya mengalami masalah ini ketika saya secara tidak sengaja memiliki salinan file tampilan (About.cshtml) untuk rute / tentang di direktori root. (Bukan folder tampilan) Setelah saya memindahkan file dari root, masalahnya hilang.

James Lawruk
sumber
1
Terima kasih! Saya baru saja menjadi gila dengan masalah yang sama dan inilah jawabannya ;-)
Rob
Keren! Saya ingat menjadi gila juga. :)
James Lawruk
Saya memiliki beberapa file .cshtml dalam sebuah folder di direktori root, yang menyebabkan hanya folder dalam pandangan saya yang gagal ... sedangkan (true) {bashHeadToWall; }. Terima kasih.
matt.j.crawford
7

Memiliki masalah serupa saat menggunakan VS2012 dan VS2013.
Menambahkan baris berikut ke <appSettings> di web.config utama berhasil:

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

Jika garis itu sudah ada tetapi mengatakan 2.0.0.0, mengubahnya menjadi 3.0.0.0 bekerja.


sumber
Itu juga masalah saya setelah melakukan peningkatan MVC. Ia mengatakan 2.0.0.0, setelah berubah menjadi 3, itu berhasil.
FerX32
6

Pembaruan: 5/5/2015 Untuk proyek MVC 5 Anda, Anda perlu mengatur Versi ke 5.0.0.0 di /views/web.config Anda

<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>
phanf
sumber
1
Yup menemukan versi 5.2.0.0 yang menyebabkan masalah tetapi mengubahnya menjadi 5.0.0.0 memperbaikinya !!! Terima kasih.
vendettamit
5

Saat Anda mendeklarasikan model di bagian atas tampilan menggunakan kode seperti ini:

@model MyModel

Anda perlu memanfaatkan referensi Anda di bawah ini, misalnya:

@Html.Encode(Model.MyDisplayValue)

Saya percaya web.config yang hilang di folder Views akan menjadi penyebab utama ini, tetapi jika itu sudah diperbaiki dan masalah masih berlanjut, periksa apakah Anda menggunakan Model , bukan model untuk merujuknya di sumber.

Bork Blatt
sumber
1
Ini menyelesaikan kesalahan ketika masalahnya adalah Anda mencoba mereferensikan model Anda dalam kode Anda sendiri dalam tampilan, seperti ketika Anda membuat helper Anda sendiri yang tidak bergantung pada ekspresi lambda, dll.
JohnC
3

Saya mengalami masalah ini juga. Keadaan saya sedikit berbeda.

  1. Salah satu folder tampilan saya tidak sengaja dipindahkan ke direktori root proyek saya. Ini mengarah pada project_root/SignUp/ViewNamepencocokan rute sebelumnya project_root/Views/SignUp/ViewName. Ini menyebabkan @modelkesalahan.

  2. Setelah memindahkan tampilan kembali ke lokasi yang sesuai, entah bagaimana direktori tersebut dibuat ulang di root proyek. Kali ini kosong. /SignUp/ViewNamebekerja, tapi /SignUp/membuat 403 - Forbidden: Access is denied.kesalahan. The seluruh folder harus dikeluarkan dari akar proyek.

Saya harap ini membantu seseorang. Saya menghabiskan waktu berjam-jam untuk mempercayai bahwa masalah tersebut disebabkan oleh peningkatan terbaru kami dari MVC 3 ke MVC 4. Sekadar catatan: Masalah peningkatan seharusnya hanya terjadi antara MVC 2 dan MVC 3. Jika Anda melihat masalah ini di versi yang lebih baru, mungkin itu bukan karena meningkatkan.


sumber
2

Butuh waktu lama bagi saya untuk menyelesaikan masalah ini, tetapi akhirnya saya berharap saya menyelesaikannya di MVC, yang serupa:

Saya telah menginstal ulang ASP.NET 4.5 ( http://www.asp.net/downloads )

Saya telah mengikuti tutorial peningkatan versi di http://www.asp.net/whitepapers/mvc4-release-notes

TAPI paragraf yang disebutkan ini salah bagi saya

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

Karena saya memiliki Razor di System.Web.Razor , jadi saya mengubah namespace pisau cukur menjadi System.Web.Razor.

Tambahkan ini ke web.config Anda

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

Saya telah menambahkan referensi perakitan untuk semua majelis di atas

Temukan elemen ProjectTypeGuids dan ganti {E53F8FEA-EAE0-44A6-8774-FFD645390401} dengan {E3E379DF-F4C6-4180-9B81-6769533ABE47}.

Itu semuanya.

Tomas Kubes
sumber
1
appsettings selain webconfig memecahkannya untuk saya. Meskipun menurut saya <add key="webpages:Version" value="2.0.0.0" />adalah faktor pendorong, pengaturan lain tidak diperlukan.
Sepatu
1
untuk MVC 5 ini perlu 3.0.0.0tapi ya ini sangat penting!
Simon_Weaver
2

Ini adalah kesalahan yang mengerikan tetapi:

Pastikan Anda memiliki file Web.config di View at Remote . Mungkin Anda melewatkan untuk mengunggahnya dengan filter program Ftp Anda.

Pcodea Xonos
sumber
2

Saya kehilangan web.config di bawah Area / MyArea / Views / web.config. Setelah ditambahkan itu berfungsi dengan baik. Ini dengan MVC 5 dan .NET4.5

Pemenang
sumber
Milik saya juga hilang, dengan bantuan dari situs ini, saya membuatnya berfungsi kembali. forums.asp.net/t/…
Perposterer
0

Ada juga alasan lain. Dalam kasus saya, saya telah menyalin file index.cshtml ke folder root web (di luar folder Views) sebagai cadangan dari server jarak jauh.

Jadi, saya terus mengubah /views/web.config saya, terus mengubah /views/home/index.cshtml saya dan kesalahan terus terjadi ... sampai menemukan /index.cshtml di luar folder views, menghapusnya dan tentu saja, itu semuanya kembali normal!

Nestor
sumber
0

Saya mengalami masalah yang sama, tetapi dalam kasus saya, satu-satunya hal yang telah berubah adalah saya telah menghapus Visual Studio 2012 dan menginstal Visual Studio 2013. Saya membuka solusi kami, tetapi saya terus mendapatkan The name 'model' does not exist in current contextkesalahan yang sama di setiap tampilan Razor.

Rekan kerja saya menyarankan untuk memeriksa pembaruan untuk VS2013. Setelah saya menginstal Pembaruan VS2013 1 , saya berhenti mendapatkan kesalahan ini.

John Washam
sumber
1
Saya mendapatkan kesalahan ini dengan VS2013 Update 2 . Dengan Pembaruan 1 itu berfungsi dengan baik. Belum dapat menemukan solusi untuk itu. Saya mencoba untuk menghapus Pembaruan 2, tetapi itu mengakibatkan VS macet setelah membuka file cshtml.
iheartcsharp
Saya memiliki masalah yang sama dengan VS2013 Update 2.
EricP
0

Periksa file konfigurasi Anda pada direktori views. di tambahkan kunci untuk MVC 4/5

sansalk
sumber
0

Menginstal ulang nuget menyelesaikannya untuk saya

PM> Instal-Paket Microsoft.AspNet.Razor -Versi 3.2.3

pixelagent
sumber
0

Bagi saya inilah masalahnya. Seluruh blok ini hilang dari bagian itu.

  <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>
Kevin Dark
sumber
0

Saya mendapat masalah yang sama setelah memperbarui paket. Saya melakukan semua hal yang Anda tulis di atas dalam topik ini, tetapi warna merah yang mendasari kata kunci model belum hilang. Kemudian, solusi yang ditemukan: baru saja menghapus folder 'paket' dari direktori proyek saya dan membangunnya kembali, sementara itu mengizinkan NuGet untuk memulihkan paket yang hilang. Diperbarui, dan selesai!

Peter.k
sumber
0

Periksa file web.config Anda harus ada di file yang diterbitkan

Arash Farahani
sumber
0

Saya menghadapi masalah yang sama dan kemudian saya menemukan solusi. Solusinya adalah:

  1. Tutup Visual Studio
  2. Hapus file SUO
  3. Mulai ulang Visual Studio

File .suo adalah file tersembunyi di folder yang sama dengan file solusi .svn . Semoga berhasil!

Arsman Ahmad
sumber