'ViewBag' adı mevcut bağlamda mevcut değil


91

ViewBag'i uygulamamda kullanmaya çalışıyorum, MVC 3'ün en son sürümü olan son dll'lerin tümüne sahibim, ancak yine de Hatayı alıyorum:

"'ViewBag' adı mevcut bağlamda mevcut değil"

Hatta MVC 3'ü kaldırdım ve sonra yeniden kurdum ve henüz bir değişiklik yok.

Ayrıca, dll'lerin GAC'de göründüğüne inanmıyorum.

Benim sorunum ne olabilir? Veya dll'leri GAC'ye nasıl ekleyebilirim?


1
5.2.2.0 için web.config'in 5.2.2.0'a, MVC montajı için Views / web.config 5.1.0.0'a işaret etmesi gerektiğini unutmayın
Bart Calixto

Yanıtlar:


39

Web.config dosyanıza MVC'ye özgü Razor yapılandırmasını eklemeniz gerekir. Buraya bakın: Razor HtmlHelper Uzantıları (veya görünümler için diğer ad alanları) Bulunamadı

Doğru yapılandırma değerlerine sahip olduğunuzdan otomatik olarak emin olmak için MVC 3 yükseltme aracını kullanın.


Teşekkürler! Bu bağlantı yardımcı oldu! Sanırım bunların hepsi MVC 3 Beta'da olan bir site yapmanın bir sonucu ve daha sonra en son sürümü aldığınızda, web yapılandırmaları değişmiyor. Teşekkürler!
efleming


Yapılandırmanızın doğru olduğundan emin olmak için yükseltme aracını kullanabilirsiniz (güncellenmiş yanıta bakın).
marcind

3
Sadece bir not: Ek görüntüleme konumlarınız varsa, yani normal ~/Viewskonumun dışında, ~/Views/Web.configo konuma da kopyalayın .
Dave Thieben

84

Ben de aynı sorunu yaşıyordum. ./Views/Web.configBir ASP.NET MVC şablonu kullanmak yerine projeyi boş bir ASP.NET uygulamasından oluşturduğum için dosyayı kaçırdım.

ASP.NET MVC 5 için bir vanilya ./Views/Web.configdosyası aşağıdakileri içerir:

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

./Views/Web.configBu içeriği içeren bir dosya eklemek benim için bu sorunu çözdü.


3
Sonunda çözüm. /Views/Web.config dosyasını sunucuya dağıtmadım ve bu eksik dosya hatanın nedeniydi.
Stack Man

2
geri geldi ve bu çözümü 2. kez kullandı! :)
user230910

2
Bir günü anlamaya çalışarak harcadıktan sonra, bu benim için yaptı. Teşekkürler. "./Views/Web.config dosyasındaki <namespaces> etiketine eklemem gereken tek şey; <add namespace="System.Web.Optimization"/>
dunwan

benim durumumda, bazı nedenlerden ötürü, öğeler kök web.config içinde değildi, ancak bir MVC5 düzeni oluşturduğumda 'Görünümler' altında bir web.config dosyasına eklendiler. Öğeleri web.config köküne
taşıdım

2
Dostum, Tanrı bunun için seni korusun. Bundan SON DERECE sinirlenmiştim.
Dragan B.

19

Temizlemeyi ve yeniden inşa etmeyi deneyin. Benim durumumda işe yaradı.


... Benim koduyla yanlış olduğunu merak zamanımı boşa teşekkür inanamıyorum işe yaradı
Mr_Hmp

bunun işe yaradığını çileden çıkarıyorum ... bunu yapmayı her zaman unutuyorum ve çok zaman harcıyorum ... gerekli olmamalı
TCC

benim durumumda paketler klasörünü çözümden
silmem

9

Visual Studio 2015'te MVC 5'e yükseltilmiş bir çözümde aynı sorunu yaşadım.

Görünümler klasöründeki (kök web.config değil) web.config dosyasında, ' <configSections>den' 2.0.0.0e atıfta bulunulan sürüm numarasını güncelledim 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
Çok teşekkür ederim! Bu sürüm işleri çılgınca. Her geri döndüğümde MS yükseltmeleri birbirinin üstüne geliyor. Ling to SQL, Entity Framework ile değiştirilir, MVC 1'den 6'ya, sürekli olarak değiştirilmiştir.
JustJohn

Teşekkürler, VS2017 ile ilgili sorunumu çözdüm.
QuickNull

VS 2019 mvc 5 uygulaması düzeltildi.
MrDywar

6

Farklı şeyler denedikten sonra, bunun VS önbelleği olduğu ortaya çıktı. Bunu şurada bulunan önbellek dosyalarını silerek çözebilirsiniz:

C: \ Kullanıcılar \ adınız.burada \ AppData \ Local \ Microsoft \ VisualStudio \ 14.0 \ ComponentModelCache

Projemi kapattım, o yoldaki dosyaları sildim ve projemi yeniden açtım, çözümü temizledim ve tekrar kurdum ve sorun çözüldü

Visual Studio'yu bir sonraki başlattığınızda dosyalar yeniden oluşturulacak


Bu benim için v15'te (VS 2017) de çalıştı. Muhtemelen bunu yapmayı asla düşünmezdim ... büyük zaman tasarrufu için teşekkürler, Wilson & Silver!
Paul Schroeder

Evrensel yol%LOCALAPPDATA%\Microsoft\VisualStudio\14.0\ComponentModelCache
fiat

3

Aynı sorunu yaşadım ve crimbo bana doğru ipucunu verdi, bunun nedeni var olan ancak sanırım doğru ad alanlarını içermeyen ./Views/Web.config dosyasıydı ...

Boş bir MVC5 projesi oluşturdum ve ./Views/Web.config dosyasını mevcut projeme aktardım ve her ViewBag kullanımındaki kırmızı dalgalar kayboldu!


Visual Studio 2013, MVC kutusu işaretli boş web projesi oluşturdu. Minimum MVC ad alanı referanslarıyla tüm dosya yapısını oluşturur. Basit bir denetleyici ve görünüm ekledim. Derleme hataları aldım "'Ajax' tür veya ad alanı adı 'System.Web.Mvc' ad alanında mevcut değil (bir derleme başvurusu eksik mi?). Dosya Düzenleyici ayrıca "'ViewBag' adı mevcut bağlamda yok" uyarısını da gösterir. Proje referanslarına gidin, System.Web.Mvc'yi bulun, yerel kopyayı true olarak ayarlayın. yapıyı temizle ve yeniden inşa et, sorunumu çözdü.
Kagan Agun


2

Bir dosyam vardı ./Views/Web.Configama bu hata siteyi yayınladıktan sonra oldu. Dosyadaki derleme eylemi özelliğinin Noneyerine olarak ayarlandığı ortaya çıkar Content. Bunu, Contentyayınlamanın düzgün çalışmasına izin verecek şekilde değiştirmek.


1

Özellikler iletişim kutusundaki Uygulamanın Varsayılan ad alanını değiştirdikten sonra bu sorunu yaşadım.

./Views/Web.Config dosyası, eski ad alanına bir başvuru içeriyordu


Evet ve tamamen yanlış yerde bir hata mesajı veriyor .. TÜM web.config dosyalarında atıfta bulunulan tüm ad alanlarının mevcut olup olmadığını kontrol etmeye değer - Alanın web / yapılandırma dosyasında birçok soruna neden olan eski bir ad alanı vardı
user230910

1

Benim durumumda, web sayfasını uygun değere değiştirmek sorunumu çözdü, benim için doğru değer (3.0.0.0 yerine 2.0.0.0 idi):

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

1

Tüm yaklaşımları denedikten sonra, sahip olduğum tek şey doğru konfigürasyonlar olduğundan hiçbiri benim için çalışmadı. en sonunda

Sistemden tüm dosyaların "temp" ve "% temp%" den silinmesi bu sorunun çözülmesine yardımcı oldu.

Çalıştır komutunu (Windows + R) açın ve yukarıdaki dizeleri yazın ve tüm geçici dosyaları silin.


Teşekkür ederim! Her şeyi denedikten sonra bu benim için çalıştı.
user390480

1

Mevcut tüm cevapları denediyseniz ve hala cevabı bulamıyorsanız, bu sorunu çözebilir. Debug, Release vb. Gibi farklı çözüm yapılandırmalarınız varsa, proje çıktı yolunu 'bin' olarak ayarlayın ve projeyi derleyin. Derlemeden sonra değişikliği geri alın.

Proje Çıktı Yolu

VS, bin klasöründe dll'leri arar


1

Zaten bin ve obj dosyasını silmeyi ve VS'yi yeniden başlatmayı denedim ve şansım olmadı.

Bu sorunu birçok kez yaşadım ve her seferinde çözmem gereken bir acı. Genellikle bunun nedeni web.config dosyasının referanslardan birinin doğru sürümüne sahip olmamasıdır. Bu, özellik sekmesindeki sürümü görmek için Visual Studio'da referansa tıklayın ve ardından web.config dosyalarındaki sürümle eşleştirin.

Diğer bir yol (mümkünse) .net çerçevesinin sonraki bir sürümüne yükseltmek ve ardından bin / obj dosyalarını silmek ve Visual Studio'yu yeniden başlatmaktır. Sadece bir şeyi değiştirdiğini varsayabilirim

Csproj dosyası arasındaki farkın hızlı bir şekilde kontrol edilmesi aslında herhangi bir büyük fark göstermez ... Ancak gösterdiği farklılıklar (eski satırı göstermek için ekledim (kaldır))

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

Web.Config dosyasında (Görünümdeki değil)

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

Ayrıca (aynı web.config dosyasına) ekledi ancak manuel olarak kaldırdım

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

Son olarak, Paket Yöneticisi Konsolunda şunu ekleyin: update-package

Web sitesini yerel olarak çalıştırın ve ikinci paragrafımla düzeltilen derleme hatalarını görün (referansların sürümleriyle eşleşen)


0

Web sayfalarını güncelledim: ./Views/Web.Config klasörünün altındaki sürüm, ancak bu ayar aynı zamanda web.config dizininde de mevcuttu. İkisini de güncelleyin veya kök web.config'den kaldırın


0

@Wilson Vallecilla'nın da bahsettiği gibi. Önbelleği silmek için lütfen aşağıdaki adımları uygulayın:

Dosyaları keşfetmek için lütfen aşağıdaki yolu izleyin:

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

Dört dosyanın tümünü silin:

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

Projemi kapattım, o yoldaki dosyaları sildim ve projemi yeniden açtım, çözümü temizledim ve tekrar kurdum ve sorun çözüldü

Geçici ASP.NET Dosyalarınızı silmek de yardımcı olur. C: \ Kullanıcılar \ adınız.burada \ AppData \ Local \ Temp \ Geçici ASP.NET Dosyaları.

Bu benim için çalışıyor.

Teşekkürler!


0

MVC5 için, sıfırdan bir uygulama oluşturuyorsanız. Görünümler klasörüne bir web.config dosyası eklemeniz ve aşağıdaki kodu içine yapıştırmanız gerekir.

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

MVC 3 için sürümü 3.0.0.0 olarak değiştirmeniz gerekeceğini unutmayın.

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

Değişiklikleri görmek için * .cshtml sayfasını kapatıp tekrar açmanız gerekebilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.