Nama 'ViewBag' tidak ada dalam konteks saat ini

89

Saya mencoba menggunakan ViewBag di aplikasi saya, saya memiliki semua dll terbaru, versi terbaru MVC 3, tetapi saya masih mendapatkan Error:

"Nama 'ViewBag' tidak ada dalam konteks saat ini"

Saya bahkan telah menghapus dan menginstal ulang MVC 3, namun tidak ada perubahan.

Juga, saya tidak percaya bahwa dll muncul di GAC.

Apa masalah saya? Atau bagaimana menambahkan dll ke GAC?

efleming
sumber
1
Perlu diingat, untuk 5.2.2.0 web.config harus menunjuk ke 5.2.2.0 tetapi Views / web.config ke 5.1.0.0 untuk perakitan MVC
Bart Calixto

Jawaban:

39

Anda perlu menambahkan konfigurasi Razor khusus MVC ke web.config Anda. Lihat di sini: Ekstensi Razor HtmlHelper (atau ruang nama lain untuk tampilan) Tidak Ditemukan

Gunakan alat peningkatan MVC 3 untuk secara otomatis memastikan Anda memiliki nilai konfigurasi yang benar.

marcind
sumber
Terima kasih! Tautan itu membantu! Saya rasa ini semua adalah hasil dari pembuatan situs yang ada di MVC 3 Beta, dan kemudian ketika Anda mendapatkan versi terbaru, konfigurasi web tidak berubah. Terima kasih!
efleming
Saya telah memperbarui posting saya dengan ini serta perbaikan terkait: stevesmithblog.com/blog/…
ssmith
Anda dapat menggunakan alat peningkatan (lihat jawaban yang diperbarui) untuk memastikan konfigurasi Anda sudah benar.
marcind
3
Sekadar catatan: jika Anda memiliki lokasi tampilan tambahan, misalnya di luar ~/Viewslokasi normal , salin ~/Views/Web.configke lokasi itu juga.
Dave Thieben
83

Saya mengalami masalah yang sama. Ternyata saya kehilangan ./Views/Web.configfile tersebut, karena saya membuat proyek dari aplikasi ASP.NET kosong alih-alih menggunakan template ASP.NET MVC.

Untuk ASP.NET MVC 5, ./Views/Web.configfile vanilla berisi berikut ini:

<?xml version="1.0"?>

<!-- https://stackoverflow.com/a/19899269/178082 -->
<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>

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

        <!--
                Enabling request validation in view pages would cause validation to occur
                after the input has already been processed by the controller. By default
                MVC performs request validation before a controller processes the input.
                To change this behavior apply the ValidateInputAttribute to a
                controller or action.
        -->
        <pages
                validateRequest="false"
                pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
                pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
                userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
            <controls>
                <add assembly="System.Web.Mvc, Version=5.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>

Menambahkan ./Views/Web.configfile yang berisi konten ini memperbaiki masalah ini untuk saya.

crimbo
sumber
3
Solusi akhirnya. Saya tidak menerapkan file /Views/Web.config ke server dan file yang hilang itu adalah penyebab kesalahan.
Stack Man
2
kembali dan menggunakan solusi ini untuk kedua kalinya! :)
user230910
2
Setelah menghabiskan lebih dari satu hari mencoba mencari tahu, ini berhasil untuk saya. Terima kasih. Satu-satunya hal yang perlu saya tambahkan ke tag <namespaces> di "./Views/Web.config adalah; <add namespace="System.Web.Optimization"/>
dunwan
dalam kasus saya, untuk beberapa alasan elemen tidak ada di root web.config tetapi ditambahkan ke web.config di bawah 'Views' ketika saya membuat layout MVC5. Saya memigrasi elemen ke root web.config dan menghapus 'ekstra' (??) web.config
JDPeckham
2
Bung, Tuhan memberkati Anda untuk ini. Saya SANGAT kesal dengan ini.
Dragan B.
19

Cobalah untuk Membersihkan dan membangun kembali. Ini berhasil dalam kasus saya.

Ruwan Jayalath
sumber
Tidak percaya saya membuang-buang waktu saya bertanya-tanya apa yang salah dengan kode saya ... terima kasih berhasil
Mr_Hmp
menyebalkan bahwa ini berhasil ... saya selalu lupa melakukan ini dan membuang begitu banyak waktu ... seharusnya tidak perlu
TCC
dalam kasus saya, saya harus menghapus folder paket dari solusi dan melakukan pembersihan
Nerdroid
9

Saya mengalami masalah yang sama dalam solusi yang telah ditingkatkan ke MVC 5 di Visual Studio 2015.

Di file web.config dalam folder Tampilan (bukan root web.config), saya memperbarui nomor versi yang dirujuk <configSections>dari 2.0.0.0ke 3.0.0.0.

<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>
Jon Crowell
sumber
2
Terima kasih banyak! Versi ini gila. Setiap kali saya berbalik, peningkatan MS semuanya terjadi satu sama lain. Ling menjadi SQL digantikan oleh Entity Framework, MVC telah berubah dari 1 menjadi 6, dan seterusnya.
JustJohn
Terima kasih, perbaiki masalah saya dengan VS2017.
QuickNull
Memperbaiki VS 2019 aplikasi mvc 5.
MrDywar
6

Setelah mencoba berbagai hal, ternyata itu adalah VS cache. Anda dapat mengatasinya dengan menghapus file cache yang terletak di:

C: \ Users \ your.name.here \ AppData \ Local \ Microsoft \ VisualStudio \ 14.0 \ ComponentModelCache

Saya menutup proyek saya, menghapus file di jalur itu dan membuka kembali proyek saya, membersihkan solusinya dan membangunnya lagi dan masalahnya teratasi

File akan dibuat kembali saat Anda meluncurkan Visual Studio berikutnya

Wilson Vallecilla
sumber
Ini bekerja untuk saya di v15 (VS 2017) juga. Saya mungkin tidak akan pernah berpikir untuk melakukan ini ... terima kasih untuk penghematan waktu yang besar, Wilson & Silver!
Paul Schroeder
Jalur universal%LOCALAPPDATA%\Microsoft\VisualStudio\14.0\ComponentModelCache
fiat
3

Saya memiliki masalah yang sama dan crimbo memberi saya petunjuk yang benar, itu disebabkan oleh file ./Views/Web.config yang ada tetapi tidak berisi ruang nama yang benar, saya kira ...

Saya membuat proyek MVC5 kosong dan mengimpor ./Views/Web.config ke dalam proyek saya yang ada dan gelombang merah di bawah setiap penggunaan ViewBag hilang!

JJP
sumber
Visual Studio 2013, membuat proyek web kosong dengan kotak MVC dicentang. Ini menciptakan semua struktur file dengan referensi namespace MVC minimum. Saya menambahkan pengontrol dan tampilan sederhana. Saya mendapat kesalahan kompilasi "Jenis atau nama namespace 'Ajax' tidak ada di namespace 'System.Web.Mvc' (apakah Anda kehilangan referensi perakitan)". Editor File juga menampilkan peringatan "Nama 'ViewBag' tidak ada dalam konteks saat ini". Buka referensi Proyek, temukan System.Web.Mvc, setel salinan lokal ke true. membersihkan bangunan dan membangun kembali, itu memecahkan masalah saya.
Kagan Agun
2

Saya memiliki ./Views/Web.Configfile tetapi kesalahan ini terjadi setelah situs dipublikasikan. Ternyata properti tindakan build pada file tersebut ditetapkan ke, Nonebukan Content. Mengubah ini menjadi Contentmengizinkan penerbitan untuk bekerja dengan benar.

Kcoder
sumber
1

Saya mengalami masalah ini setelah mengubah namespace Default Aplikasi di dialog Properties.

./Views/Web.Config berisi referensi ke namespace lama

csharpsql.dll
sumber
Ya, dan ini memberikan pesan kesalahan di tempat yang sepenuhnya salah .. ada baiknya memeriksa apakah semua namespace ada yang dirujuk di SEMUA file web.config - Saya memiliki namespace lama di file web / konfigurasi Area yang menyebabkan banyak masalah
pengguna230910
1

Dalam kasus saya, mengubah halaman web: Versi ke nilai yang tepat menyelesaikan masalah saya, bagi saya nilai yang benar adalah (2.0.0.0 bukan 3.0.0.0):

<appSettings>
        <add key="webpages:Version" value="2.0.0.0"/>
        <add key="webpages:Enabled" value="false"/>
Robin Leblond
sumber
1

Setelah mencoba semua pendekatan, tidak ada yang berhasil untuk saya karena semua yang saya miliki adalah konfigurasi yang benar. akhirnya

Menghapus semua file dari "temp" dan "% temp%" dari sistem membantu menyelesaikan masalah ini.

Buka perintah Run (Windows + R) dan ketik string di atas dan hapus semua file sementara.

Juara
sumber
Terima kasih! Setelah mencoba segalanya, ini berhasil untuk saya.
user390480
1

Jika Anda telah mencoba semua jawaban yang tersedia dan masih tidak dapat menemukan jawabannya, ini mungkin menyelesaikan masalah. Jika Anda memiliki konfigurasi solusi yang berbeda seperti Debug, Rilis, dll., Maka setel jalur keluaran proyek ke 'bin' dan kompilasi proyek. Kembalikan perubahan setelah kompilasi.

Jalur Keluaran Proyek

VS mencari dll di folder bin

Naga Sailesh
sumber
1

Saya sudah mencoba menghapus bin dan file obj dan memulai ulang VS dan tidak berhasil.

Saya juga mengalami masalah ini berkali-kali dan sulit untuk diselesaikan setiap saat. Seringkali karena file web.config tidak memiliki versi yang benar dari salah satu referensi. Ini berarti klik pada referensi di Visual Studio untuk melihat versi di tab properti, lalu cocokkan dengan versi di file web.config.

Cara lain adalah (jika mungkin) meningkatkan ke versi yang lebih baru dari kerangka kerja .net dan kemudian menghapus file bin / obj dan memulai ulang Visual Studio. Saya hanya bisa berasumsi itu mengubah sesuatu di

Pemeriksaan cepat dari perbedaan antara file csproj tidak benar-benar menunjukkan perbedaan besar ... Tetapi perbedaan yang ditunjukkannya adalah (Saya telah menambahkan (menghapus) untuk menunjukkan baris lama)

<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> (remove)
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>(remove)
<TargetFrameworkVersion>v4.6</TargetFrameworkVersion>

Di file Web.Config (bukan yang ada di View)

<add key="webpages:Version" value="2.0.0.0" /> (remove)
<add key="webpages:Version" value="3.0.0.0"/>

Itu juga ditambahkan (ke file web.config yang sama) tetapi saya menghapusnya secara manual

 <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"/>
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+"/>
    </compilers>
  </system.codedom>

Terakhir, di Package Manager Console, tambahkan update-package

Jalankan situs web secara lokal dan lihat kesalahan kompilasi yang diperbaiki oleh paragraf kedua saya (cocok dengan versi referensi)

Dave
sumber
0

Saya memperbarui halaman web: Versi di bawah folder ./Views/Web.Config tetapi pengaturan ini juga ada di web.config di root. Perbarui keduanya atau hapus dari root web.config

pengguna1412699
sumber
0

Seperti yang telah disebutkan @Wilson Vallecilla. Silakan lakukan langkah-langkah di bawah ini untuk menghapus cache:

Ikuti jalur di bawah ini untuk menemukan file:

C:\Users\your.name.here\AppData\Local\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 menutup proyek saya, menghapus file di jalur itu dan membuka kembali proyek saya, membersihkan solusinya dan membangunnya lagi dan masalahnya teratasi

Menghapus File ASP.NET Sementara Anda juga membantu. C: \ Users \ your.name.here \ AppData \ Local \ Temp \ Temporary ASP.NET Files.

Ini berhasil untuk saya.

Terima kasih!

Trilok Pathak
sumber
0

Untuk MVC5, jika Anda membuat aplikasi dari awal. Anda perlu menambahkan file web.config ke folder Views dan menempelkan kode berikut di dalamnya.

<?xml version="1.0"?>
<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>

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

Perhatikan bahwa untuk MVC 3 Anda harus mengubah versi menjadi 3.0.0.0 di

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

Anda mungkin harus menutup dan membuka halaman * .cshtml lagi untuk melihat perubahannya.

Ashish Kaul
sumber