我在項目中添加了cshtml頁面。當我嘗試向它添加以下聲明時,出現錯誤:「名稱」模型「在當前上下文中不存在」。MVC3中當前上下文中不存在名稱'model'
@model xyz.abc.SomeClass
我檢查了參考文獻,所有這些參考文獻都已到位。我在視圖文件夾中添加了一個web.config,但沒有解決它。
有什麼我失蹤?
我在項目中添加了cshtml頁面。當我嘗試向它添加以下聲明時,出現錯誤:「名稱」模型「在當前上下文中不存在」。MVC3中當前上下文中不存在名稱'model'
@model xyz.abc.SomeClass
我檢查了參考文獻,所有這些參考文獻都已到位。我在視圖文件夾中添加了一個web.config,但沒有解決它。
有什麼我失蹤?
更新:如果您使用的是較新版本的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文件複製到你的意見的文件夾。
重要一旦你這樣做了,你需要關閉文件並重新打開它。瞧!智能感知!
我不能將此標記爲答案,但這也是我的問題。忘了將這些部分添加到web.config。 – Dave
是的,希望我可以將你的標記作爲答案。我被困住了一段時間(在我第一次嘗試轉換成Razor失敗後放棄了),這一直是問題所在。謝謝! –
不適用於我。或者,至少,有時我會得到智能感知,有時候我不會,即使我已經在Views文件夾的web.config中設置了所有這些設置。 –
當我創建一個新區域來組織我的頁面時,遇到了同樣的問題。我的結構看起來有點像:
WebProject
在WebProject下的瀏覽文件夾中創建的意見工作得很好,但NewArea下創建的視圖扔以下錯誤:「名稱'模型'在當前上下文中不存在。」爲了解決這個問題,我將WebProject下的Views文件夾中的web.config複製到了NewArea中的Views文件夾中。見下文。
WebProject
我遇到了這一點,因爲我手動創建使用添加這個新的領域 - >新建文件夾來添加文件夾。我應該右鍵單擊該項目並選擇添加 - >區域。然後Visual Studio會照顧正確設置區域。
+1 ...我只是注意到,由於某種原因,web.config不包括在內,很高興我找到了你的答案來解決我的問題 – pollirrata
我意識到這是舊的,但我今天實際上有同樣的問題,所以我想說謝謝你的答案。 :) –
我也有同樣的問題,和類似的解決方案。我的'Views/Web.config'引用了'System.Web.Mvc.MvcWebRazorHostFactory'版本5.0.0.0,並且我有一個第三方Area引用v4.0和視圖合作。我將'Views/Web.config'設置回v4.0,並且一切正常。 –
當你使用這樣的代碼在視圖頂部聲明型號:
@model MyModel
你需要下面利用你對它的引用,例如:
@Html.Encode(Model.MyDisplayValue)
我相信在Views文件夾中缺少web.config將是造成這種情況的主要原因,但是如果該問題得到解決並且問題仍然存在,請檢查您使用的是型號而不是型號以指代它在源頭上。
這個問題解決了這個問題,當你試圖在你自己的代碼中引用你的模型的時候,比如當你自己的助手不依賴於lambda表達式等。 – JohnC
我遇到了這個問題,當我無意中在根目錄中爲route/about創建了視圖文件(About.cshtml)的副本時。 (不是視圖文件夾)一旦我將文件移出根目錄,問題就消失了。
謝謝!我剛剛發生同樣的問題,這就是答案;-) – Rob
酷!我記得也很生氣。 :) –
我在根目錄的文件夾中有一些.cshtml文件,導致我的視圖中只有文件夾失敗... while(true){bashHeadToWall; }。謝謝。 –
我也遇到了這個問題。我的情況有點不同。
我的一個視圖文件夾被意外移動到我的項目的根目錄。這導致路線 project_root/SignUp/ViewName
匹配project_root/Views/SignUp/ViewName
之前。這導致了@model
錯誤。
將視圖移回到適當的位置後,該目錄以某種方式在項目根目錄中重新創建。這次是空的。 /SignUp/ViewName
工作,但/SignUp/
拋出403 - Forbidden: Access is denied.
錯誤。必須從項目根目錄中刪除整個文件夾。
我希望這可以幫助別人。我花了幾個小時認爲問題是由我們最近從MVC 3升級到MVC 4造成的。只需注意:升級問題應該只發生在MVC 2和MVC 3之間。如果您在更高版本上看到此問題,則可能不是由於升級。
如果你的觀點是在一個類庫組件中,這對於在項目間重複使用共享視圖很有用,那麼只是做亞當建議可能是不夠的。即使如此,我仍然有問題。在你的意見文件夾
<?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項目。
這是用於web項目中的web.config文件還是類庫中的web.config文件? – theJerm
我花了好長時間才解決了這個問題,但最後我希望我已經解決了它的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}。
就是這樣。
appsettings除了webconfig解決了我。雖然我認爲'
對於MVC 5,這需要「3.0.0.0」,但是這是非常重要的! –
System.Web.Razor解決了我的問題,謝謝。 –
還有另外一個原因。在我的情況下,我已將index.cshtml文件作爲遠程服務器的備份複製到Web根文件夾(在Views文件夾外)。
因此,我不斷更改我的/views/web.config,不斷更改我的/views/home/index.cshtml和錯誤不斷髮生......直到找到/index.cshtml視圖文件夾外部,刪除它當然,這一切都恢復正常!
我遇到了同樣的問題,但在我的情況下,唯一改變的是我卸載了Visual Studio 2012並安裝了Visual Studio 2013.我打開了我們的解決方案,但我一直得到相同的The name 'model' does not exist in current context
錯誤在每個剃刀視圖中。
我的同事建議檢查VS2013的更新。在我安裝了VS2013 Update 1後,我停止了這個錯誤。
更新: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>
Yup找到版本5.2.0.0這是造成問題,但將其更改爲5.0.0.0固定它!謝謝。 – vendettamit
使用VS2012和VS2013有類似的問題。在主web.config中
添加以下行<的appSettings >工作:
<add key="webpages:Version" value="3.0.0.0" />
如果該行已經在那裏了,但說2.0.0.0,將其更改爲3.0.0.0工作。
這是我執行MVC升級後的問題。它說2.0.0.0,在更改爲3時,它工作。 – FerX32
檢查您的配置文件的意見目錄。在 中添加鍵值的MVC 4/5
重新安裝的NuGet解決了這個問題對我來說
PM>安裝,包裝Microsoft.AspNet.Razor -Version 3.2.3
這是一個可怕的錯誤,但:
要確保你有你的查看的Web.config文件在遠程。也許你跳過了上傳它的Ftp程序的過濾器。
對我來說這是個問題。該部分缺少整個區塊。
<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>
我在更新軟件包後遇到同樣的問題。我完成了本主題上面所寫的全部內容,但model關鍵字的紅色底層並未消失。後來找到解決辦法:只需從我的項目目錄中刪除'包'文件夾並重建,同時允許NuGet恢復丟失的包。刷新,並完成!
檢查你的web.config文件應該發佈的文件
我面臨同樣的問題,然後我找到一個解決方案來存在。解決的辦法是:
- Close Visual Studio
- Delete the SUO file
- Restart Visual Studio
的名爲.suo文件是在的.svn解決方案文件所在的同一文件夾中的隱藏文件。希望,它會工作!
我在Areas/MyArea/Views/web.config下缺少web.config。一旦添加它工作正常。這是與MVC 5和.NET4.5
我也失蹤了,在這個網站的幫助下,我再次工作。 https://forums.asp.net/t/1978969.aspx?+Unrecognized+configuration+section+system+web+webPages+razor+ – Perposterer
如果您正在尋找MVC4解決方案,Adam的答案是有效的,您需要從您的主web.config中找到正確的版本號並在此處使用。 MVC4視圖文件夾web.config缺少行,並從根web.config複製一個(它可能有其他值不同,所以檢查你的)並將其放入視圖。然後我們關閉了這個項目並在Visual Studio中重新加載它,並且它實現了這個訣竅。 –