Lempar Razor View “Nama 'model' tidak ada dalam konteks saat ini”


201

Setelah refactoring yang signifikan di aplikasi MVC 4 saya, dan Razor menunjukkan kesalahan ini saat debugging Views:

Nama 'model' tidak ada dalam konteks saat ini.

Ini adalah baris kode yang menyinggung:

@model ICollection<DataSourceByActive>

Saya tahu bahwa penggunaannya @modelbenar.

Mengapa ini terjadi? Bagaimana saya bisa memperbaikinya?


Kuncinya adalah "dalam konteks saat ini". Di suatu tempat braket tidak bisa dibuka atau ditutup ... Jadi pernyataan Anda tidak dalam konteks yang Anda pikirkan.
Floris

1
Bisakah Anda menambahkan kode pengontrol Anda bersama dengan beberapa markup sampel dari apa yang Anda coba lakukan?
scniro

Jawaban:


245

Saya pikir Anda telah mengacaukan file web.config yang hidup di folder Views.

Buat proyek baru yang menargetkan kerangka kerja .NET yang sama dan salin file Views / web.config di atas yang ada di proyek Anda saat ini. Ini akan memperbaiki masalah Anda.

Juga, seperti yang dikomentari Dudeman3000, jika Anda memiliki Wilayah dalam proyek MVC Anda, mereka semua memiliki Views\web.configfile juga.


20
ingat bahwa jika Anda memiliki Wilayah dalam proyek MVC Anda, mereka semua memiliki file Views \ web.config juga!
Dudeman3000

6
Anehnya web.config saya di direktori views baik-baik saja, tetapi web.config proyek memiliki versi halaman web 2.0.0. Deteksi kesalahan palsu hilang ketika saya membuatnya 3.0.0.
William T. Mallard

43
This will fix your problem.Itu tidak.
Timwi

2
@AnirudhaGupta Yang ada di pertanyaan.
Timwi

1
Saya telah menyalin file web.config yang valid ke folder Views saya tetapi tidak termasuk dalam proyek.
Wildcat Matt

104

Pastikan Anda memiliki yang berikut di situs Web.configdan direktori tampilan Web.configdi appSettingsbagian tersebut

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

Untuk penggunaan MVC5:

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

(Dan itu hanya ada di Web.configfile utama .)


14
Terima kasih! Untuk MVC5, nomor versi harus 3.0.0.0. (Dan itu hanya ada di file Web.config utama .)
xec

Ini adalah jawaban yang tepat yang akan saya katakan ketika saya mencoba di mana-mana untuk mengubah versi tidak tetapi pada akhirnya ini adalah satu-satunya hal yang mencegah kecerdasan pisau untuk bekerja.
Shivam Chopra

6
Ini berhasil untuk saya. Saya harus me-restart Visual Studio setelah perubahan ini agar semuanya berfungsi.
Ravvy

1
Saya punya masalah dengan MVC 5, masalahnya adalah bahwa kuncinya ada tetapi menargetkan versi 2.0.0.0bukan 3.0.0.0. Mengubah itu memperbaiki masalah. Terima kasih!
vaindil

Saya menggunakan ini dan itu berhasil tetapi saya hanya menambahkannya ke tampilan web.config. Intellisense muncul tepat setelah restart VS.
Matt

48

Inilah yang saya lakukan:

  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 dan berisi Opsi Pengguna Visual Studio.


Ya, tidak ada web.configfile untuk ASP.NET Coreaplikasi, jadi ini bekerja untuk saya (juga menambahkan beberapa ekstensi untuk meningkatkan intellisense).
VMAtm

2
Saya bahkan tidak perlu menghapus file SUO. Saya baru saja menutup dan membuka Visual Studio.
Jim S

Visual Studio 2019: Tidak ada file suo, menghapus .vsfolder membantu.
Štěpán Havránek

Terima kasih .. ini berhasil untukku. .net Core 2.0 mvc app
roblem

2
Visual Studio 2019 di sini, tutup dan buka kembali untuk saya. Terima kasih.
JordanGW

26

Saya memiliki masalah yang sama, saya membuat proyek baru dan menyalin file web.config seperti yang direkomendasikan dalam jawaban oleh Gupta, tetapi itu tidak memperbaiki masalah bagi saya. Saya memeriksa jawaban oleh Alex dan Liam, saya pikir baris ini pasti telah disalin dari web.config baru, tetapi sepertinya proyek baru itu sendiri tidak memiliki baris ini (MVC5):

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

Menambahkan baris ke file dilihat / web.config memecahkan masalah bagi saya.


Yang ini terjadi jika Anda memutakhirkan dari asp.net versi 4.0.0 ke 4.5.1. Dalam kasus saya, web.config utama saya menunjukkan halaman web: Versi = 2.0.0.0 tetapi harus 3.0.0.0. Memperbarui nilai ini memperbaiki masalah.
Veysel Ozdemir

15

Mengubah baris berikut di web.config folder tampilan memecahkan kesalahan yang sama.

Dari

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

Untuk

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

1
Ini juga bekerja untuk saya. Saya telah memperbarui pisau cukur untuk mendukung C # 6 dan MVC harus diperbarui juga. Periksa System.Web.Mvcreferensi perakitan Anda untuk mengonfirmasi versi utama yang Anda butuhkan.
James Wilkins

Saya memiliki masalah yang sama. memperbaiki semua MVC, Razor dll. rakitan di web.config ke x.0.0.0 membuat semuanya berfungsi untuk saya lagi
mamashare

@ JamesWilkins Bagus, bekerja untuk saya ty. Hanya satu hal, hapus file .suo proyek Anda setelah itu dan mulai ulang VS.

tangkapan yang bagus! Saya menghadapi masalah ini setelah saya memutakhirkan dari .net framework 4.0 ke 4.6 dan jelas menunjuk ke versi perakitan yang salah.
prashant

10

Dalam kasus saya, saya baru saja memperbarui dari MVC 4 ke MVC 5, yang mengacaukan web.config dengan sangat buruk. Artikel ini sangat membantu.

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

Intinya adalah bahwa Anda perlu memeriksa semua referensi nomor versi Anda di web.config dan Views / web.config Anda untuk memastikan bahwa mereka mereferensikan versi upgrade yang benar terkait dengan MVC 5.


1
Jika Anda meningkatkan dari MVC 4 ke MVC 5, ini adalah jawaban untuk memeriksa. Persisnya menunjukkan masalah versi, memecahkan masalah saya dan ada sedikit risiko untuk memecahkan apa pun.
R. Schreurs

10

Mengubah ke @Model dari @model berhasil bagi saya.

@model mewakili tipe objek View Model. @ Model mewakili objek Model Tampilan.


1
Saya berharap saya akan berhenti melupakan ini! Terima kasih sudah mengingatkan saya!
Mike

1
Jumlah kali saya harus mencari masalah ini membuat frustrasi .. Tapi saya senang itu adalah perbaikan sederhana!
Brendan Sluke

7

Saya sudah menemukan solusinya. Jika Anda ingin memperbarui versi silet atau mvc 4 hingga 5, ubah beberapa baris.

Kode lama di 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>

Digantikan dengan

<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 harus diubah juga.


6

Dalam kasus saya, kode berikut ini bermanfaat. Tempatkan kode di bawah ini dalam file Web.config di bawah folder Views.

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

Setelah kode diperbarui, pastikan untuk membersihkan dan membangun kembali solusinya. Saya harap ini akan membantu Anda!


5

Tidak ada jawaban yang ada bekerja untuk saya, tapi saya menemukan apa yang lakukan bekerja untuk saya dengan membandingkan .csprojfile proyek yang berbeda. Edit manual berikut ke file .csprojXML memecahkan masalah Razor-intellisense bagi saya, mungkin ini dapat membantu orang lain yang telah mencoba semua jawaban lain tetapi tidak berhasil. Kuncinya adalah untuk menghilangkan contoh <Private>False</Private>di <Reference>'s:

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

Saya tidak tahu bagaimana mereka sampai di sana atau tepatnya apa yang mereka lakukan, mungkin seseorang yang lebih pintar dari saya dapat menambahkan informasi itu. Saya senang akhirnya bisa menyelesaikan masalah ini.


Terima kasih atas sarannya, ini juga bekerja untuk saya, untuk alasan apa pun
Scherling

Bekerja untuk saya juga.
Alex

Itu adalah satu-satunya pilihan yang berhasil dalam kasus saya. Saya beralih proyek vs2010 ke 2019 dan bekerja seperti pesona. Setelah menyimpan csproj saya mencoba menghapus tanda komentar pada tag seperti file asli, dan masih berfungsi ...
jefissu

3

Untuk beberapa alasan web.config saya punya 0.0.0.0 dalam atribut 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>

mengubah ke 1.0.0.0 adalah solusinya:

  <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

Saya menggunakan proyek MVC4 dengan Visual Studio 2019 - dan ternyata VS 2019 tidak mendukung MVC 4 out-of-the-box. Anda harus menginstal ini.

Langkah:

  • Buka penginstal Visual studio (Cari Penginstal Visual Studio di windows)
  • Klik masing-masing komponen
  • Tulis "mvc" di kotak pencarian
  • Centang kotak mvc4
  • Klik "Ubah" di kanan bawah

CATATAN: Diperlukan untuk studio visual ditutup

masukkan deskripsi gambar di sini


2

Dalam kasus saya, masalahnya adalah setelah memutakhirkan proyek dari MVC 4 ke MVC 5 Saya entah bagaimana melewatkan perubahan versi di 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">            

Itu masih memiliki versi 2.0.0.0 lama. Setelah mengubah versi ke 3.0.0.0 semuanya mulai berfungsi dengan benar.

Juga, karena masalah ini, Visual Studio 2015 Community Edition akan mulai mem-bashing CPU (30-40% penggunaan saat idle) setiap kali saya akan membuka file .cshtml.


2

Saya memiliki masalah yang sama ketika digunakan untuk Layanan Aplikasi Azure

Dalam kasus saya itu karena ~ / Views / Web.config tidak termasuk dalam proyek.

Itu bekerja di IIS Express tetapi ketika saya ditempatkan ke biru, saya mendapat kesalahan yang sama. Dengan tidak dimasukkan dalam file .csproj, itu tidak digunakan.

Solusinya adalah untuk memastikan ~ / Views / Web.config termasuk dalam proyek.

Jika Anda pergi ke explorer solusi dan klik ikon "Tampilkan semua file", kemudian buka Tampilan Anda mungkin melihat file Web.config tidak termasuk di bawah sana.

Tambahkan, terbitkan ulang, dan bob pamanmu.


1

Bagi saya, masalahnya adalah versi .NET yang saling bertentangan di salah satu perpustakaan yang baru-baru ini saya impor. Perpustakaan yang saya impor dikompilasi untuk 4.5.2 dan situs ASP.NET MVC saya mengimpornya ke dalam target 4.5. Setelah mengkompilasi ulang kata lib untuk 4.5 situs web akan melakukan kompilasi.

Juga, tidak ada kesalahan kompilasi, tetapi masalah ini dilaporkan sebagai "peringatan". Jadi pastikan untuk membaca semua peringatan jika ada.


1

Untuk mengatasi ini, saya memastikan bahwa saya memutakhirkan ke versi MVC terbaru menggunakan NuGet dan Package Manager Console.

Instal-Paket Microsoft.AspNet.Mvc -Versi 5.2.4

Kemudian ditingkatkan ke versi Razor terbaru

Instal-Paket Microsoft.AspNet.Razor -Versi 3.2.4

Lalu saya mengubah semua file web.config untuk mencerminkan perubahan. Seperti yang akan Anda lihat di bawah:

Di file web.config utama, pastikan bahwa halaman web: versi sudah benar. Di sinilah dapat ditemukan (abaikan tombol lain):

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

Kemudian cari versi lain yang tercantum dalam rakitan, periksa versi rakitan dengan versi perpustakaan yang tercantum dalam referensi proyek Anda! Anda mungkin tidak membutuhkan semua ini.

<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 harus menunjukkan "newversion" juga, lihat di mana ia membaca NewVersion 5.2.4.0? Tetapi juga periksa semua versi lainnya.

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

LALU di bagian Views Web.Config, pastikan bahwa Razor adalah versi yang benar:

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

Dan Lastlt ada bagian Halaman dari Views 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

jika Anda mengambil masalah ini tanpa ada perubahan pada proyek Anda seperti saya, Anda perlu mengubah web.config Anda yang ditempatkan di View Folder. cukup tulis baris baru dengan Enter atau Hapus baris kosong. kemudian simpan web.config Anda dan bangun kembali. masalah saya terpecahkan dengan solusi ini


0

Saya mencoba untuk menambahkan tampilan yang berada di luar folder "Tampilan" saya (hanya untuk mengatur kode saya berbeda, saya kira), ketika saya memiliki masalah ini. Membuat tampilan di dalam Tampilan (sesuai kesepakatan) menyelesaikannya.


0

Dalam kasus saya, saya kehilangan @ di awal 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>
    }

Ini penting; Tidak tahu mengapa Anda tidak dipilih.
FlyingV

1
Karena itu tidak ada hubungannya dengan pertanyaan aslinya.
Ryan

0

Dalam kasus saya, saya menghapus file web.config dari folder Views secara tidak sengaja. Saya menambahkannya kembali, dan itu OK.


-3

Saya memecahkan masalah dengan menggunakan @Modelbukan hanya modelsaat mencetak variabel.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.