2011-06-17 75 views
117

我在項目中添加了cshtml頁面。當我嘗試向它添加以下聲明時,出現錯誤:「名稱」模型「在當前上下文中不存在」。MVC3中當前上下文中不存在名稱'model'

@model xyz.abc.SomeClass 

我檢查了參考文獻,所有這些參考文獻都已到位。我在視圖文件夾中添加了一個web.config,但沒有解決它。

有什麼我失蹤?

+0

如果您正在尋找MVC4解決方案,Adam的答案是有效的,您需要從您的主web.config中找到正確的版本號並在此處使用。 MVC4視圖文件夾web.config缺少行,並從根web.config複製一個(它可能有其他值不同,所以檢查你的)並將其放入視圖。然後我們關閉了這個項目並在Visual Studio中重新加載它,並且它實現了這個訣竅。 –

回答

236

更新:如果您使用的是較新版本的MVC,則應用相同的過程,只需確保在web.config的<host>行中使用正確的版本號。

嗯,我發現自己遇到了同樣的事情,經過一番進一步的研究,我發現問題是什麼!

您需要在Views文件夾中包含默認的MVC3 web.config。 MVC3有兩個:一個用於應用程序的根目錄,另一個用於視圖文件夾。這有一個包含命名空間的部分。要確保你看起來是這樣的:

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

我建議你創建一個新的MVC3項目,那麼就爲您創建的web.config文件複製到你的意見的文件夾。

重要一旦你這樣做了,你需要關閉文件並重新打開它。瞧!智能感知!

+1

我不能將此標記爲答案,但這也是我的問題。忘了將這些部分添加到web.config。 – Dave

+0

是的,希望我可以將你的標記作爲答案。我被困住了一段時間(在我第一次嘗試轉換成Razor失敗後放棄了),這一直是問題所在。謝謝! –

+2

不適用於我。或者,至少,有時我會得到智能感知,有時候我不會,即使我已經在Views文件夾的web.config中設置了所有這些設置。 –

29

當我創建一個新區域來組織我的頁面時,遇到了同樣的問題。我的結構看起來有點像:

WebProject

  • []領域
    • [] NewArea
      • []控制器
      • []查看
  • []控制器
  • []查看
    • 的Web.config
  • 的Web.config

在WebProject下的瀏覽文件夾中創建的意見工作得很好,但NewArea下創建的視圖扔以下錯誤:「名稱'模型'在當前上下文中不存在。」爲了解決這個問題,我將WebProject下的Views文件夾中的web.config複製到了NewArea中的Views文件夾中。見下文。

WebProject

  • []領域
    • [] NewArea
      • []控制器
      • []瀏覽
        • 的Web.config
  • []控制器
  • []查看
    • 的Web.config
  • 的Web.config

我遇到了這一點,因爲我手動創建使用添加這個新的領域 - >新建文件夾來添加文件夾。我應該右鍵單擊該項目並選擇添加 - >區域。然後Visual Studio會照顧正確設置區域。

+2

+1 ...我只是注意到,由於某種原因,web.config不包括在內,很高興我找到了你的答案來解決我的問題 – pollirrata

+2

我意識到這是舊的,但我今天實際上有同樣的問題,所以我想說謝謝你的答案。 :) –

+0

我也有同樣的問題,和類似的解決方案。我的'Views/Web.config'引用了'System.Web.Mvc.MvcWebRazorHostFactory'版本5.0.0.0,並且我有一個第三方Area引用v4.0和視圖合作。我將'Views/Web.config'設置回v4.0,並且一切正常。 –

5

當你使用這樣的代碼在視圖頂部聲明型號:

@model MyModel 

你需要下面利用你對它的引用,例如:

@Html.Encode(Model.MyDisplayValue) 

我相信在Views文件夾中缺少web.config將是造成這種情況的主要原因,但是如果該問題得到解決並且問題仍然存在,請檢查您使用的是型號而不是型號以指代它在源頭上。

+1

這個問題解決了這個問題,當你試圖在你自己的代碼中引用你的模型的時候,比如當你自己的助手不依賴於lambda表達式等。 – JohnC

7

我遇到了這個問題,當我無意中在根目錄中爲route/about創建了視圖文件(About.cshtml)的副本時。 (不是視圖文件夾)一旦我將文件移出根目錄,問題就消失了。

+1

謝謝!我剛剛發生同樣的問題,這就是答案;-) – Rob

+0

酷!我記得也很生氣。 :) –

+0

我在根目錄的文件夾中有一些.cshtml文件,導致我的視​​圖中只有文件夾失敗... while(true){bashHeadToWall; }。謝謝。 –

3

我也遇到了這個問題。我的情況有點不同。

  1. 我的一個視圖文件夾被意外移動到我的項目的根目錄。這導致路線 project_root/SignUp/ViewName匹配project_root/Views/SignUp/ViewName之前。這導致了@model錯誤。

  2. 將視圖移回到適當的位置後,該目錄以某種方式在項目根目錄中重新創建。這次是空的。 /SignUp/ViewName工作,但/SignUp/拋出403 - Forbidden: Access is denied.錯誤。必須從項目根目錄中刪除整個文件夾。

我希望這可以幫助別人。我花了幾個小時認爲問題是由我們最近從MVC 3升級到MVC 4造成的。只需注意:升級問題應該只發生在MVC 2和MVC 3之間。如果您在更高版本上看到此問題,則可能不是由於升級。

10

如果你的觀點是在一個類庫組件中,這對於在項目間重複使用共享視圖很有用,那麼只是做亞當建議可能是不夠的。即使如此,我仍然有問題。在你的意見文件夾

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
    <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> 
    </configSections> 
    <system.web.webPages.razor> 
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
    <pages pageBaseType="System.Web.Mvc.WebViewPage"> 
     <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.Routing" /> 
     <add namespace="System.Web.WebPages" /> 
     </namespaces> 
    </pages> 
    </system.web.webPages.razor> 
    <appSettings> 
    <add key="webpages:Version" value="2.0.0.0" /> 
    <add key="webpages:Enabled" value="false" /> 
    <add key="PreserveLoginUrl" value="true" /> 
    <add key="ClientValidationEnabled" value="true" /> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
    </appSettings> 
    <system.web> 
    <compilation debug="true" targetFramework="4.0"> 
     <assemblies> 
     <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     <add assembly="System.Web.Helpers, Version=2.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=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     <add assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     <add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/> 
     </assemblies> 
    </compilation> 
    <pages> 
     <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.Routing" /> 
     <add namespace="System.Web.WebPages" /> 
     </namespaces> 
    </pages> 
    </system.web> 
    <system.webServer> 
    <validation validateIntegratedModeConfiguration="false" /> 
    <modules runAllManagedModulesForAllRequests="true" /> 
    <handlers> 
     <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" /> 
     <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" /> 
     <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
     <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" /> 
     <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" /> 
     <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 
    </handlers> 
    </system.webServer> 
</configuration> 

這在web.config:

在你的web.config在你的項目的根目錄試試這個

<?xml version="1.0"?> 

<configuration> 
    <configSections> 
    <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> 
    </configSections> 

    <system.web.webPages.razor> 
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.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> 
    <pages 
     validateRequest="false" 
     pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" 
     pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" 
     userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> 
     <controls> 
     <add assembly="System.Web.Mvc, Version=4.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> 

這爲我工作。我現在有一個intellisense,在我的視圖中沒有編譯錯誤,我可以從多個MVC網站中引用非MVC項目。

+1

這是用於web項目中的web.config文件還是類庫中的web.config文件? – theJerm

2

我花了好長時間才解決了這個問題,但最後我希望我已經解決了它的MVC,類似於:

我必須重新安裝ASP.NET 4.5(http://www.asp.net/downloads

我都跟着在http://www.asp.net/whitepapers/mvc4-release-notes

升級教程,但此提到的段落是錯誤的,我

System.Web.Mvc, Version=4.0.0.0 
System.Web.WebPages, Version=2.0.0.0 
System.Web.Helpers, Version=2.0.0.0 
System.Web.WebPages.Razor, Version=2.0.0.0 

因爲我有剃刀在System.Web.Razor,所以我改變了剃刀命名空間System.Web.Razor。

添加到您的web.config

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

我有裝配基準添加到所有這些組件上面

找到ProjectTypeGuids元素和替換{E53F8FEA-EAE0-44A6-8774-FFD645390401}與{E3E379DF-F4C6-4180-9B81-6769533ABE47}。

就是這樣。

+1

appsettings除了webconfig解決了我。雖然我認爲''是驅動因素,其他設置是不需要的。 – Shoe

+1

對於MVC 5,這需要「3.0.0.0」,但是這是非常重要的! –

+0

System.Web.Razor解決了我的問題,謝謝。 –

0

還有另外一個原因。在我的情況下,我已將index.cshtml文件作爲遠程服務器的備份複製到Web根文件夾(在Views文件夾外)。

因此,我不斷更改我的/views/web.config,不斷更改我的/views/home/index.cshtml和錯誤不斷髮生......直到找到/index.cshtml視圖文件夾外部,刪除它當然,這一切都恢復正常!

0

我遇到了同樣的問題,但在我的情況下,唯一改變的是我卸載了Visual Studio 2012並安裝了Visual Studio 2013.我打開了我們的解決方案,但我一直得到相同的The name 'model' does not exist in current context錯誤在每個剃刀視圖中。

我的同事建議檢查VS2013的更新。在我安裝了VS2013 Update 1後,我停止了這個錯誤。

+1

我收到VS2013 Update ** 2 **的這個錯誤。更新1它工作正常。尚未能找到解決方案呢。我試圖卸載更新2,但導致VS在打開cshtml文件後崩潰。 – JMS10

+0

我有與VS2013更新2相同的問題。 – Dwayne

6

更新:2015/5/5 對於您的MVC 5項目,您需要在您的/ views/web中將Version設置爲5.0.0.0。config

<system.web.webPages.razor> 
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
</system.web.webPages.razor> 
+1

Yup找到版本5.2.0.0這是造成問題,但將其更改爲5.0.0.0固定它!謝謝。 – vendettamit

7

使用VS2012和VS2013有類似的問題。在主web.config中
添加以下行<的appSettings >工作:

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

如果該行已經在那裏了,但說2.0.0.0,將其更改爲3.0.0.0工作。

+0

這是我執行MVC升級後的問題。它說2.0.0.0,在更改爲3時,它工作。 – FerX32

0

檢查您的配置文件的意見目錄。在 中添加鍵值的MVC 4/5

0

重新安裝的NuGet解決了這個問題對我來說

PM>安裝,包裝Microsoft.AspNet.Razor -Version 3.2.3

2

這是一個可怕的錯誤,但:

要確保你有你的查看的Web.config文件遠程。也許你跳過了上傳它的Ftp程序的過濾器。

0

對我來說這是個問題。該部分缺少整個區塊。

<assemblies> 
    <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
    <add assembly="System.Web.Helpers, Version=2.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=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
    <add assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
    <add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/> 
    </assemblies> 
0

我在更新軟件包後遇到同樣的問題。我完成了本主題上面所寫的全部內容,但model關鍵字的紅色底層並未消失。後來找到解決辦法:只需從我的項目目錄中刪除'包'文件夾並重建,同時允許NuGet恢復丟失的包。刷新,並完成!

0

檢查你的web.config文件應該發佈的文件

0

我面臨同樣的問題,然後我找到一個解決方案來存在。解決的辦法是:

  1. Close Visual Studio
  2. Delete the SUO file
  3. Restart Visual Studio

名爲.suo文件是在的.svn解決方案文件所在的同一文件夾中的隱藏文件。希望,它會工作!

1

我在Areas/MyArea/Views/web.config下缺少web.config。一旦添加它工作正常。這是與MVC 5和.NET4.5

+0

我也失蹤了,在這個網站的幫助下,我再次工作。 https://forums.asp.net/t/1978969.aspx?+Unrecognized+configuration+section+system+web+webPages+razor+ – Perposterer

相關問題