Razor View “Mevcut modelde 'model' adı mevcut değil”


201

MVC 4 uygulamamda önemli ölçüde yeniden düzenleme yaptıktan sonra ve Razor, hata ayıklama sırasında bu hatayı gösteriyor:

'Model' adı geçerli bağlamda mevcut değil.

Bu rahatsız edici kod satırıdır:

@model ICollection<DataSourceByActive>

Kullanımının @modeldoğru olduğunu biliyorum .

Bu neden oluyor? Nasıl düzeltebilirim?


Anahtar "geçerli bağlamda" dır. Bir köşeli parantez açılmadı ve kapanmadı ... Yani ifadeniz düşündüğünüz bağlamda değil.
Floris

1
Denetleyici kodunuzu, yapmaya çalıştığınız örnek bir işaretleme ile birlikte ekleyebilir misiniz?
scniro

Yanıtlar:


245

Views klasöründe yaşayan web.config dosyasını bozduğunuzu düşünüyorum.

Aynı .NET çerçevesini hedefleyen yeni bir proje oluşturun ve Views / web.config dosyasını geçerli projenizdekinin üstüne kopyalayın. Bu sorununuzu çözecektir.

Ayrıca, Dudeman3000'in açıkladığı gibi, MVC projenizde Alanlar varsa, hepsinde de Views\web.configdosyalar vardır.


20
MVC projenizde Alanlar varsa bunların hepsinin Views \ web.config dosyalarına sahip olduğunu unutmayın!
Dudeman3000

6
Garip bir şekilde görünümler dizinindeki web.config dosyam iyi, ancak projenin web.config dosyasının 2.0.0 web sayfası sürümü vardı. Ben 3.0.0 yaptığımda yanlış hata tespiti gitti.
William T. Mallard

43
This will fix your problem.Yapmadım.
Timwi

2
@AnirudhaGupta Sorudaki.
Timwi

1
Views klasörüne geçerli bir web.config dosyası kopyaladım, ancak projeye dahil edilmedi.
Wildcat Matt

104

Emin olun hem sitenizin şu var Web.configve görünümleri dizininde Web.configyer appSettingsbölümünde

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

MVC5 kullanımı için:

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

(Ve sadece ana Web.configdosyada bulunur.)


14
Teşekkürler! MVC5 için sürüm numarasının olması gerekir 3.0.0.0. (Ve yalnızca ana Web.config dosyasında bulunur.)
xec

Bu, her yerde sürümü değiştirmeye çalıştığımda söyleyeceğim doğru cevaptı ama sonunda jilet zekasının çalışmasını engelleyen tek şey buydu.
Shivam Chopra

6
Bu benim için çalıştı. Bu değişiklikten sonra her şeyin çalışması için Visual Studio'yu yeniden başlatmam gerekiyordu.
Ravvy

1
MVC 5 ile bu sorunu vardı, sorun anahtarı var ama 2.0.0.0yerine sürüm hedefleme oldu 3.0.0.0. Bunu değiştirmek sorunu çözdü. Teşekkür ederim!
vaindil

Bunu kullandım ve işe yaradı ama sadece web.config görünümlerine ekledim. Intellisense, VS'nin yeniden başlatılmasından hemen sonra ortaya çıktı.
Matt

48

İşte yaptım:

  1. Visual Studio'yu kapatın
  2. SUO dosyasını silme
  3. Visual Studio'yu yeniden başlat

.Suo dosyası, .svn çözüm dosyasıyla aynı klasörde bulunan gizli bir dosyadır ve Visual Studio Kullanıcı Seçeneklerini içerir.


Evet, uygulama web.configiçin bir dosya yok ASP.NET Core, bu yüzden bu benim için çalıştı (ayrıca gelişmiş intellisense için bazı uzantılar ekledi).
VMAtm

2
SUO dosyasını silmek zorunda bile değildim. Visual Studio'yu kapattım ve açtım.
Jim S

Visual Studio 2019: Suo dosyası yok, .vsklasörü silmek yardımcı oldu.
Štěpán Havránek

Teşekkürler .. Bu benim için yaptı. .net Core 2.0 mvc uygulaması
roblem

2
Visual Studio 2019'u burada kapatın ve yeniden açın, benim için düzeltti. Teşekkürler.
JordanGW

26

Aynı sorunu yaşadım, yeni bir proje oluşturdum ve web.config dosyalarını Gupta'nın cevabında önerildiği gibi kopyaladım, ancak bu benim için bir şey düzeltmedi. Alex ve Liam'ın cevabını kontrol ettim, bu satırın yeni web.config'den kopyalanması gerektiğini düşündüm, ancak yeni projenin kendisinde bu satır (MVC5) olmadığı anlaşılıyor:

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

Views / web.config dosyasına satır eklemek sorunu benim için çözdü.


Bu, asp.net sürüm 4.0.0'dan 4.5.1'e yükselttiğinizde olur. Benim durumumda, ana web.config dosyam web sayfalarını gösteriyordu: Sürüm = 2.0.0.0 ama 3.0.0.0 olmalıdır. Bu değerin güncellenmesi sorunu çözdü.
Veysel Ozdemir

15

Görünüm klasörünün web.config dosyasında aşağıdaki satırı değiştirmek aynı hatayı çözdü.

itibaren

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

için

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

1
Bu da benim için çalıştı. C # 6 desteklemek için jilet yükseltilmiş ve MVC de güncellenmiş olması gerekir. System.Web.Mvcİhtiyacınız olan ana sürümü onaylamak için montaj referansınızı kontrol edin .
James Wilkins

Ben de aynı problemi yaşadım. x.0.0.0 için web.config tüm MVC, Razor vb meclisleri sabitleme benim için tekrar çalışma şeyler var
mamashare

@ JamesWilkins Nice, benim için çalıştı ty. Sadece bir şey, bundan sonra proje .suo dosyanızı silin ve VS'yi yeniden başlatın.

İyi yakalama! .Net framework 4.0'dan 4.6'ya yükselttikten ve yanlış montaj sürümüne işaret ettikten sonra bu sorunla karşı karşıya kaldım.
prashant

10

Benim durumumda, son zamanlarda MVC 4'ten web.config'i oldukça kötü bir şekilde vidalayan MVC 5'e güncelledim. Bu makale çok yardımcı oldu.

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

Sonuç olarak, MVC 5 ile ilişkili doğru yükseltilmiş sürümlere başvurduklarından emin olmak için web.config ve Views / web.config dosyasındaki tüm sürüm numarası referanslarınızı kontrol etmeniz gerekir.


1
MVC 4'ten MVC 5'e yükseltme yaptıysanız, kontrol etmek için yanıt budur. Sürüm sorunlarını tam olarak saptar, sorunumu çözdü ve herhangi bir şeyi kırmak için çok az risk var.
R. Schreurs

10

Model'den @Model olarak değiştirmek benim için iş yaptı.

model, Modeli Görüntüle nesne türünü temsil eder. @Model, Model Görüntüle nesnesini temsil eder.


1
Keşke bunu unutmayı bıraksaydım! Bana hatırlattığın için teşekkürler!
Mike

1
Ben bu sorunu aramak zorunda kez sinir bozucu .. Ama basit bir düzeltme sevindim!
Brendan Sluke

7

Bir çözüm buldum. Jilet sürümünü veya mvc 4'ü 5'e güncellemek istiyorsanız, bazı satırları değiştirin.

Views / web.config dosyasındaki eski kod

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

İle değiştirildi

<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 değişim de olmalı.


6

Benim durumumda, aşağıdaki kod yararlı bulundu. Aşağıdaki kodu Views klasörü altındaki Web.config dosyasına yerleştirin.

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

Kod güncellendiğinde, çözümü temizlediğinizden ve yeniden oluşturduğunuzdan emin olun. Umarım bu sana yardımcı olur!


5

Mevcut cevapların hiçbiri benim için işe yaramadı , ancak .csprojfarklı projelerin dosyalarını karşılaştırarak benim için neyin işe yaradığını buldum . .csprojXML dosyasına yapılan aşağıdaki manuel düzenleme benim için Razor-intellisense problemini çözdü, belki bu boşuna diğer tüm cevapları deneyen başka birine yardımcı olabilir. Anahtar, 's <Private>False</Private>içindeki herhangi bir örneği kaldırmaktır <Reference>:

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

Bunların oraya nasıl geldiğini veya tam olarak ne yaptığını bilmiyorum, belki benden daha akıllı biri bu bilgiyi ekleyebilir. Sonunda bu sorunu çözmekten mutlu oldum.


Öneri için teşekkürler, bu da benim için çalıştı, ne olursa olsun
Scherling

Benim için de çalıştı.
Alex

Benim durumumda çalışan tek seçenek buydu. Bir vs2010 projesini 2019'a değiştirdim ve bir cazibe gibi çalıştım. Csproj kaydettikten sonra orijinal dosya gibi etiketleri uncomment çalıştı ve hala çalışıyor ...
jefissu

3

Nedense web.config dosyam oldVersion özniteliğinde 0.0.0.0'a sahipti :

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

1.0.0.0 olarak değiştirmek çözümdü:

  <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

Visual Studio 2019 ile bir MVC4 projesi kullanıyordum ve VS 2019'un MVC 4'ü kutudan çıkardığını desteklemediği ortaya çıktı. Bunu yüklemelisin.

Adımlar:

  • Visual studio yükleyiciyi açın (Windows'ta Visual Studio Installer'ı arayın)
  • Ayrı bileşenleri tıklayın
  • Arama kutusuna "mvc" yazın
  • Mvc4 kutusunu işaretleyin
  • Sağ alttaki "Değiştir" i tıklayın

NOT: Görsel stüdyonun kapatılması için gereklidir

resim açıklamasını buraya girin


2

Benim durumumda, sorun MVC 4 projeden MVC 5'e yükselttikten sonra bir şekilde Views / web.config bir sürüm değişikliği kaçırdı:

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

Hala eski 2.0.0.0 sürümü vardı. Sürümü 3.0.0.0 olarak değiştirdikten sonra her şey doğru çalışmaya başladı.

Ayrıca, bu sorun nedeniyle, bir .cshtml dosyasını her açışımda Visual Studio 2015 Community Edition CPU'yu (boşta% 30-40 kullanım) dayamaya başlayacaktır.


2

Bir Azure Uygulama Hizmetine dağıtım yaparken de aynı sorunu yaşadım

Benim durumumda ~ / Views / Web.config projeye dahil edilmemişti.

IIS Express'te çalıştı, ancak masmavi konuşlandırdığımda aynı hatayı aldım. .Csproj dosyasına dahil edilmediği için konuşlandırılmadı.

Çözüm, ~ / Views / Web.config dosyasının projeye dahil edilmesini sağlamaktı.

Solution explorer'a gidip "Tüm dosyaları göster" simgesine tıklarsanız, Views'u açın, altında eklenmemiş bir Web.config dosyası görebilirsiniz.

Onu ekleyin, yeniden yayınlayın ve bob amcanız.


1

Benim için sorun, yakın zamanda içe aktardığım kütüphanelerden birinde çakışan bir .NET sürümüydü. İçe aktardığım kütüphane 4.5.2 için derlendi ve onu içe aktardığım ASP.NET MVC sitesi 4.5 hedeflendi. Söz konusu lib 4.5 için yeniden derlendikten sonra web sitesi derlenecektir.

Ayrıca, derleme hataları yoktu, ancak sorun "uyarı" olarak bildiriliyordu. Bu yüzden varsa tüm uyarıları okuduğunuzdan emin olun.


1

Bunu çözmek için NuGet ve Paket Yöneticisi Konsolu'nu kullanarak en yeni MVC sürümüne geçtim.

Kurulum Paketi Microsoft.AspNet.Mvc-Sürüm 5.2.4

Ardından en son Razor sürümüne yükseltildi

Yükleme Paketi Microsoft.AspNet.Razor-Sürüm 3.2.4

Sonra değişikliği göstermek için tüm web.config dosyalarını değiştirdim. Aşağıda göreceğiniz gibi:

Ana web.config dosyasında webpages: sürümünün doğru olduğundan emin olun. Bulunduğu yer burasıdır (diğer anahtarları yoksayın):

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

Derlemelerde listelenen diğer sürümleri arayın, derlemenin sürümünü proje referanslarınızda listelenen kitaplığın sürümüyle karşılaştırın! Bunların hepsine ihtiyacınız olmayabilir.

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

Binding "newversion" da göstermelidir, NewVersion 5.2.4.0 nerede okuduğunu görmek gerekir? Ancak diğer tüm sürümleri de kontrol edin.

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

Daha sonra Views Web.Config bölümünde, Razor'un doğru sürüm olduğundan emin olun:

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

Lastlt, Views Web'in Sayfalar bölümü var.

    <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

bu sorunu projenizde benim gibi bir değişiklik yapmadan alırsanız, Klasörü Görüntüle'ye yerleştirilen web.config dosyanızı değiştirmeniz gerekir. boş bir satır gir veya kaldır ile yeni satır yazmanız yeterlidir. ardından web.config dosyanızı kaydedin ve yeniden oluşturun. sorunum bu çözümle çözüldü


0

Ben bu sorunu vardı, (sadece kodumu farklı, sanırım) benim "Görünümler" klasörü dışında olan bir görünüm eklemek çalışıyordu. Görünümler içinde görünüm oluşturmak (kural gereği) bunu çözdü.


0

Benim durumumda, foreach başlangıcında @ eksikti

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

Bu önemli; Neden aşağı indirildiğini bilmiyorum.
FlyingV

1
Çünkü bunun orijinal soru ile ilgisi yok.
Ryan

0

Benim durumumda, yanlışlıkla web.config dosyasını Views klasöründen kaldırdım. Geri ekledim, ve Tamam oldu.


-3

Değişkenleri yazdırırken kullanmak @Modelyerine sorunu modelçözdüm.


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.