Nama 'ViewBag' tidak ada dalam konteks saat ini - Visual Studio 2015

98

Saya mulai mengembangkan ASP.NET lagi dan saya mengalami kesalahan kecil dalam Visual Studio. File .cshtml saya menunjukkan kesalahan saat menggunakan beberapa fungsi pisau cukur. Misalnya "Nama 'ViewBag' tidak ada dalam konteks saat ini". Ini gambarnya:

tangkapan layar masalah di studio visual 2015

Saya menggunakan proyek demo. Anda dapat menemukan proyeknya di sini: https://github.com/Wintellect/Angular-MVC-Cookbook/tree/master/BasicProject

Saya telah melihat-lihat beberapa utas lain dan paling menyarankan untuk memperbarui file web.config. 2 file konfigurasi ini sudah ada dan karena ini adalah demo yang cukup populer, saya menganggapnya memiliki semua konfigurasi yang diperlukan di dalamnya. Saya tentu saja telah melihat-lihat file konfigurasi ini dan mereka memang menyertakan solusi yang disarankan.

Detail lainnya:

  • Saya telah menggunakan bersihkan & bangun kembali pada solusi tetapi itu tidak mengubah apa pun.
  • Ketika saya membuat proyek MVC yang benar-benar baru, itu berfungsi
  • Teman saya memiliki masalah yang sama dan kami berdua menggunakan VS 2015 dan Windows 10
  • Saya masih dapat menjalankan aplikasi dan berhasil.

Terima kasih sebelumnya.

Michjuh
sumber
Ketika masih berjalan, itu hanya kesalahan pada kompiler latar belakang. Coba hapus file <Projectname> .suo.
Henk Holterman
proyek mana yang kamu jalankan? dasar? mentah, perutean?
Prashant Ghimire
1
@Henk sayangnya itu tidak berhasil.
Michjuh
@Prashant Saya telah mencoba proyek dasar dan proyek perutean. Masalah terjadi di keduanya.
Michjuh
Apakah Anda menyelesaikannya? Saya memiliki masalah yang sama @Michjuh
Burk

Jawaban:

124

Saya mengalami masalah ini meskipun memiliki semua konfigurasi yang benar.

Ternyata ada beberapa file buruk di Cache Komponen, mencegah tampilan Razor mengenali ViewBag, Model, dan HtmlHelpers . Menghapus file-file ini memecahkan masalah (versi yang bagus dari file-file ini dibuat saat saya membuka Visual Studio).

File-file tersebut ada di sini:

%LOCALAPPDATA%\Microsoft\VisualStudio\14.0\ComponentModelCache

Hapus keempat file:

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

Saya kemudian melihat masalah yang sama di beberapa mesin pengembang lain dan perbaikan ini dengan cepat menyelesaikannya.

Fenton
sumber
9
Luar biasa, ini memperbaiki masalah saya. Saya juga menemukan bahwa menghapus File ASP.NET Sementara Anda juga membantu. C: \ Users \ your.name.here \ AppData \ Local \ Temp \ Temporary ASP.NET Files
Kevin
Ini juga perbaikan untuk saya. Terima kasih telah memposting!
Caverman
Ini memperbaiki masalah saya yang disebabkan oleh pemutakhiran .net 4 menjadi 4.5.2 dan memutakhirkan mvc 3 menjadi 5
Joe Phillips
Masalah saya adalah properti model saya tidak dikenali. Perbaikan ini segera menyelesaikan masalah saya.
jkerak
5
folder saya adalah 15.0_7e8de76c \ ComponentModelCache untuk VS 2017.
Kevin NET
40

Perbarui nomor versi dalam pengaturan web.configfile di folder Tampilan.

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

Jika Anda telah mengupdate versi MVC melalui nuget, seharusnya:

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

Versi ketergantungan lainnya mungkin perlu diperbarui juga. Masalah kompilasi dan namespace di Views untuk MVC pembantu dan objek biasanya terkait dengan web.configfile yang kacau dalam folder View.

Benjamin Anderson
sumber
9
Ini berhasil untuk saya, meskipun saya harus memasukkan nomor versi 5.2.0.0, bukan 5.2.2.0. Anda dapat melihat versi apa yang Anda miliki dengan membuka Referensi> System.Web.MVC dan memilih Properties. Terima kasih atas bantuannya
pengguna2233949
@ user2233949, @Benjamin Saya menggunakan versi MVC 4.0.0.0, saya dapat melihatnya dari properti. Apa yang harus diperbaiki dalam kasus saya?
Zeeshan
Periksa semua file web.config Anda dan pastikan semuanya menggunakan versi host yang benar. Kadang-kadang ketika Anda memiliki pengaturan yang diganti di folder tampilan, masalah dapat lolos tanpa diperbaiki.
Benjamin Anderson
1
Saya mencoba semua saran lain tetapi yang ini berhasil untuk saya yang menggunakan 5.2.3.0. Terima kasih Benjamin
Mitch
1
Ini adalah jawaban yang benar untuk saya. Juga setelah mengubah web.config, jangan lupa untuk menutup semua *.cshtmldan *.vbhtmlfile Anda dan bersihkan & bangun kembali solusinya. VS 2019 16.1.2
Štěpán Havránek
22

Temukan "halaman web: Versi" di setelan aplikasi dan perbarui ke versi 3.0.0.0. Web.config saya punya

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

dan saya memperbaruinya menjadi

<add key=”webpages:Version value=”3.0.0.0 />
Damian Green
sumber
1
Saya menghapus kedua baris (halaman
web.Versi
Ini harus diperbarui di kedua versi Web.config, root proyek, dan Web.configs area mana pun juga.
Sonu K
Terima kasih. Untuk kasus saya, tag bermasalah ada di <configuration> - <configSections> - <sectionGroup name = "system.web.webPages.razor"> Saya perlu mengubah <sectionGroup name = "system.web.webPages.razor">, <section name = "host"> dan <section name = "pages"> untuk menggunakan Version = 3.0.0.0
Hong
Menghapus cache di mana saja (termasuk Temporary ASP.NET Files) tidak membantu, tetapi jawaban ini membantu .
Wha7ever
Apa pengaturan ini bahkan berarti ? Apa hubungannya dengan itu? Bagaimana Anda menentukan versi mana yang Anda andalkan dalam aplikasi Anda?
jpmc26
18

Saya tidak sengaja menghapus web.configdari Viewsfolder, berpikir bahwa itu tidak perlu. Ketika saya mengembalikannya, itu mulai bekerja.

InGeek
sumber
13

Setelah mencoba segala sesuatu di bawah matahari, ternyata sesuatu yang telah dimodifikasi saya System.Web.WebPages.Razor <sectionGroup>di /Views/Web.Configdari CamelCase yang tepat System.Web.WebPages.Razoruntuk semua-huruf kecil system.web.webpages.razoryang pada akhirnya adalah kematian saya.

Berharap ini dapat membantu beberapa jiwa malang lainnya dengan masalah ini ...

Sebagai referensi, ini adalah entri yang benar (untuk skenario saya)

<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"> 
jbwebtech.dll
sumber
3
Milik saya semuanya huruf kecil tetapi tidak menyelesaikan masalah saya.
Paul Totzke
Ikan mas suci. Ini juga kematian saya. Saya tidak percaya Anda menemukan ini, @jbwedtech.
Luke Puplett
Saya juga memiliki ini dalam huruf kecil, dan mengubah kasing tidak menyelesaikan masalah.
Andy Brown
5

Terkadang tidak cukup hanya mengubah nomor versi dalam pengaturan web.config. Masalah ini terjadi karena Visual Studio 2015 tidak memiliki perkakas mvc4.

Solusinya adalah meningkatkan proyek Anda ke MVC 5. Ini benar-benar menyelesaikan masalah. Anda bisa mendapatkan bantuan dari halaman ini. Itu menjelaskannya dengan jelas.

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

Dengan cara tim Visual Studio menyatakan mereka akan menambahkan dukungan mvc4 ke Visual Studio 2015 dengan pembaruan pertama.

Burk
sumber
5

Saya menghadapi masalah ini lebih sering dan akhirnya saya menemukan bahwa itu terjadi karena folder tampilan harus berisi itu adalah konfigurasi web sendiri

hosam hemaily
sumber
2
Tapi apa yang seharusnya ada di web.config itu? Bukankah seharusnya itu dibuat secara otomatis? (update) Menemukan apa yang seharusnya dimiliki dan bagaimana itu dihasilkan stackoverflow.com/questions/29305914/…
drzaus
Ya, Anda benar, dalam proyek saya, Web.Config tidak ada sebelumnya (ya seharusnya dibuat secara otomatis tetapi mengambil proyek dari pengembang sebelumnya, tidak yakin mengapa dia menghapusnya). Setelah menambahkan file Web.Config untuk folder Views, itu berhasil.
pengguna3559462
2

terlambat ke permainan tetapi tidak ada solusi yang berhasil untuk saya.

Saya memutakhirkan ke VS 2017, dan situs berfungsi, tetapi kompiler Visual Studio merusak sebagian besar file .cshtml

TLDR;

mysolution.sln memiliki versi yang salah

sln diff

jadi Anda ingin membuat solusi baru dengan VS yang lebih baru dan membandingkannya dengan milik Anda dan menyalin info versi.

langkah-langkah peningkatan penuh:

  1. pastikan file .sln memiliki versi yang benar untuk VS
  2. klik kanan MySolution di VS> Nuget Manager> Updates> jalankan semua update
  3. klik kanan MySolution di VS> Aplikasi> perbarui Target Framework (4.5.2 dalam kasus saya)
  4. perbaiki masalah versi apa pun di file .config (yaitu RAZOR ke 3.0.0.0)
  5. perbaiki masalah kode apa pun dalam kompiler (bagi saya ForEach itu ambigu)
Sonic Soul
sumber
Proyek saya dimulai pada VS2013, ketika saya mencapai VS2017 saya mulai melihat kesalahan ini tetapi semuanya masih baik-baik saja jadi saya mencoba untuk mencari tahu apa yang sedang terjadi tetapi tidak terlalu sulit. Itu menjadi masalah karena membuka tampilan menciptakan banyak kesalahan. Saya sekarang menggunakan VS2019 dan tersandung pada perbaikan Anda; kamu keren! .Sln saya memiliki 14.0.25123.0 dan menjadi 16.3.9. Saya juga memperbaiki masalah versi apa pun dengan kerangka kerja. Saya tidak perlu memperbarui paket nuget (untungnya) karena saya tidak punya waktu untuk menguji semua pembaruan sepenuhnya.
DaBlue
1

Saya telah menyia-nyiakan lebih dari satu hari kerja untuk ini. Saya mencoba semuanya dalam posting ini (dan lainnya), tetapi tidak berhasil. Akhirnya saya menemukan bahwa saya perlu membuka proyek dengan cara yang berbeda. Saya baru saja memutakhirkan situs web yang ada ke Visual Studio 2015, MVC5, .NET framework 4.5.2 dan saya menggunakan Windows 10, tetapi curiga jawabannya akan sama untuk versi lain dari setiap aplikasi perangkat lunak.

Jadi ini adalah opsi menu yang saya pilih untuk membuka situs web:

masukkan deskripsi gambar di sini

Alih-alih ini, saya membuka file csproj yang mendefinisikan proyek menggunakan opsi menu ini:

masukkan deskripsi gambar di sini

Saya kemudian memiliki opsi "solusi bersih" yang dirujuk banyak orang lain:

masukkan deskripsi gambar di sini

Namun, saya bahkan tidak membutuhkan ini - semuanya bekerja begitu saja! Yah, bagaimanapun, saya melanjutkan ke rangkaian masalah berikutnya ...

Andy Brown
sumber
1

Saya telah menambahkan pengontrol oleh

  • Langkah 1: Tambahkan> Kelas
  • Langkah 2: UserController
  • .
  • .
  • .

kode terkait dibuat:

namespace SampleApp.Controllers
{
    public class UserController {
    }
}

Kesalahan saya diubah dengan mengubah Langkah 1 sebagai:

  • Langkah 1: Tambahkan> Pengontrol
  • Langkah 2: Pengontrol Pengguna
  • .
  • .
  • .

kode terkait dibuat:

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

Masalahnya adalah: Saya tidak mewarisi kelas saya dari Controller

Pesan lain dalam kesalahan saya termasuk - yang semuanya berasal dari masalah ini:

kesalahan CS0117: 'ModelState' tidak berisi definisi untuk 'IsValid'

kesalahan CS0103: Nama 'RedirectToAction' tidak ada dalam konteks saat ini

kesalahan CS0103: Nama 'Tampilan' tidak ada dalam konteks saat ini

kesalahan CS0103: Nama 'ViewBag' tidak ada dalam konteks saat ini

kesalahan CS0103: Nama 'Json' tidak ada dalam konteks saat ini

Semoga perubahan ini membantu mereka yang belum memperhatikan langkah awal mereka.

Ganesh Kamath - 'Code Frenzy'
sumber
1

Setelah mencoba setidaknya 90% dari setiap solusi / trik dari subjek ini (dan lainnya), saya akhirnya menyelesaikannya !! Peringatan spoiler, tidak ada jejak logika yang disebut sebagai "solusi": Menjalankan solusi dengan semua tab ditutup akhirnya berhasil, ketika tidak ada lagi yang akan menyelamatkan saya "ViewBag & Co tidak ada dalam konteks saat ini" ... Anda telah diperingatkan, tidak ada logika yang aneh!

Berharap itu akan membantu seseorang suatu hari nanti ^^

Jueverhard
sumber
1

Dalam kasus saya, saya mengalami masalah ini hanya di PC saya hanya untuk satu proyek. Proyek saya bekerja dengan baik di VS2012 tetapi ketika dibuka di VS2017 mengalami masalah ini.

Masalah utama saya di sini adalah cache. Proyek saya menunjuk ke versi cache dll yang lebih lama untuk Razor dan MVC dan tidak menemukan fitur yang ditambahkan di versi yang lebih baru, seperti ViewBag. ViewBag ditambahkan di Razor versi 3, tetapi karena saya memiliki cache Razor versi 2, ia tidak dapat menemukan ViewBag (tetapi dapat menemukan hal lain yang ada dalam versi 2). Namun, hanya membersihkan cache seperti dalam jawaban yang diterima tidak memperbaiki masalah saya. Kami harus mengubah file konfigurasi untuk mengatakan "gunakan versi 3 daripada 2" untuk Razor dan "gunakan versi 5 alih-alih 4" untuk MVC, lalu tutup VS, hapus cache, dan buka proyek dan pembangunan kembali. Kemudian semuanya diperbaiki. Di bawah ini adalah instruksi yang lebih detail.

Berikut urutan perubahan yang membantu saya memperbaiki masalah saya:

  1. Dalam folder "Tampilan", Web.config mengubah semua lokasi di mana
    • Versi MVC diatur ke 4.0.0.0 hingga 5.0.0.0
    • Versi Razor diatur ke 2.0.0.0 hingga 3.0.0.0

Inilah baris-baris itu dalam kasus saya:

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

(catatan: 1) versi Anda mungkin berbeda, saya hanya memberi tahu apa yang perlu dilakukan dalam kasus saya 2) Saya menghilangkan beberapa hal dengan "..." untuk singkatnya 3) bahkan jika Anda memiliki versi MVC seperti 5.3.2.0 Anda masih harus memasukkan 5.0.0.0, sama dengan versi Razor - masukkan semua nol di 3.0.0.0)

  1. Dalam file konfigurasi utama (yang ada di tingkat atas) ubah webPages:versiondari 2.0.0.0 menjadi 3.0.0.0.

  2. Perubahan ini mungkin tidak memengaruhi solusi tetapi saya masih akan menyebutkannya. Pastikan bahwa <namespaces>bagian folder "Views" memiliki konten yang sama persis dengan file .conifg utama di root proyek, seperti:

<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. Akhirnya, tutup VS. Hapus semua file cache di %LOCALAPPDATA%\Microsoft\VisualStudio\14.0\ComponentModelCache(atau apa pun jalur Anda yang benar) seperti yang disarankan dalam jawaban yang (saat ini) diterima oleh Fenton. Hapus juga .scanfile, meskipun tidak disebutkan dalam jawaban itu. Setelah Anda selesai, buka VS, Bersihkan proyek Anda dan Bangun kembali. Semuanya harus bekerja sekarang. Itu berhasil untuk saya.
wha7ever
sumber
0

Mematikan dan menghidupkannya kembali berhasil untuk saya. Anda dapat mencoba memulai ulang studio visual.

kravits88
sumber
Kedengarannya seperti jawaban lelucon, tapi inilah yang memperbaiki saya. mengangkat bahu
Douglas Timms
0

Saya dapat mengatasi masalah ini dengan menambahkan yang berikut ini ke bagian atas halaman .cshtml saya

@{ViewBag.Title = "Title";}

Setelah kompilasi ulang saya dapat menghapus baris ini dan kesalahannya hilang.

Colin
sumber
0

Saya menghadapi masalah serupa dengan salah satu pandangan saya. Dalam kasus saya, saya baru saja membersihkan solusinya dan mencoba membangunnya kembali dan kerjanya.

SATYA PRAKASH NANDY
sumber
0

Saya menghadapi masalah yang sama. Saya mencoba solusi Bersihkan, Bangun, dan Bangun Ulang, tetapi tidak berhasil untuk saya.

Jadi akhirnya saya lakukan seperti di bawah ini:

  1. Tekan Tombol Windows + R
  2. Ketik % temp%
  3. Tekan Enter
  4. Hapus semua file (Jika beberapa file dibiarkan Tidak dihapus, tidak ada masalah)

Semoga berhasil juga untuk kalian.

Shadiq
sumber
0

Setelah memutakhirkan salah satu aplikasi klien saya dari ASP MVC 4 ke ASP MVC 5, Kami mengalami kesalahan desainer terkait dengan Html Helpers dan ViewBag di halaman cshtml.

Untuk memperbaiki masalah tersebut pastikan Anda melakukan hal berikut: Menginstal Perpustakaan Pembantu Web Asp.NET dari Nuget Buka Web.config proyek dan perbarui pengikatan jika belum diperbarui saat menginstal paket Nuget misalnya

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

Temukan "halaman web: Versi" di setelan aplikasi dan perbarui ke versi 3.0.0.0. Web.config saya punya

dan saya memperbaruinya menjadi

Mulai ulang Visual Studio dan bangun kembali. Anda mungkin harus menghapus folder bin untuk proyek Anda

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

raniel garcia
sumber
-1

Setelah mencoba semua yang lain dan merasa sedikit frustrasi, saya meningkatkan framework .NET di aplikasi MVC5 saya dari 4.5 menjadi 4.5.2. Entah bagaimana itu memperbaiki masalah saya. Semoga membantu.

pengguna3520884
sumber
-4

Saya menyelesaikan mengganti di web.config

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

dengan

 <add key="webpages:Enabled" value="true" />
Fabio Manneschi
sumber
Hanya untuk menambah mengapa ini tidak dipilih - ini memungkinkan tampilan aktual terlihat dari browser yang saya percaya
mtbennett