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?


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.


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.


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.


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>

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


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!


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.


1

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

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


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

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.


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


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)


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


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!


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.

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.