我在一个项目中添加了一个cshtml页面。当我尝试向其中添加以下声明时,出现错误:“当前上下文中不存在名称‘模型’”。
@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 复制到您的视图文件夹中。
重要 完成此操作后,您需要关闭文件并重新打开它。瞧!智能感知!
当我创建一个新区域来组织我的页面时,我遇到了同样的问题。我的结构看起来像:
网络项目
- [] Areas
- [] NewArea
- [] Controllers
- [] Views
- [] Controllers
- [] Views
- Web.config
- Web.config
在 WebProject 下的 Views 文件夹中创建的视图工作正常,但在 NewArea 下创建的视图引发以下错误:
当前上下文中不存在名称“模型”。
为了解决这个问题,我将 WebProject 下 Views 文件夹中的 web.config 复制到 NewArea 中的 Views 文件夹中。见下文。
网络项目
- [] Areas
- [] NewArea
- [] Controllers
- [] Views
- **Web.config**
- [] Controllers
- [] Views
- Web.config
- Web.config
我遇到了这个问题,因为我使用 Add -> New Folder 手动创建了这个新区域来添加文件夹。我应该右键单击项目并选择添加 -> 区域。然后 Visual Studio 会负责正确设置该区域。
Views/Web.config
正在引用 System.Web.Mvc.MvcWebRazorHostFactory
版本 5.0.0.0,并且我有一个第三方区域引用 v4.0 并且视图相互配合。我将 Views/Web.config
设置回 v4.0,一切正常。
如果您的视图位于类库程序集中,这对于在项目之间重用共享视图很有用,那么仅执行 Adam 建议的操作可能还不够。即使这样,我仍然有问题。
在项目根目录中的 web.config 中尝试此操作:
<?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 中:
<?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>
这对我有用。现在,我在非 MVC 项目中的视图上有智能感知并且没有编译错误,然后我可以从多个 MVC 网站引用。
当我无意中在根目录中有路径 /about 的视图文件 (About.cshtml) 的副本时,我遇到了这个问题。 (不是视图文件夹)一旦我将文件移出根目录,问题就消失了。
使用 VS2012 和 VS2013 有类似的问题。将以下行添加到主 web.config 中的
<add key="webpages:Version" value="3.0.0.0" />
如果该行已经存在但显示为 2.0.0.0,则将其更改为 3.0.0.0 有效。
更新:5/5/2015 对于您的 MVC 5 项目,您需要在 /views/web.config 中将版本设置为 5.0.0.0
<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>
当您使用如下代码在视图顶部声明模型时:
@model MyModel
您需要在下面大写您对它的引用,例如:
@Html.Encode(Model.MyDisplayValue)
我相信 Views 文件夹中缺少 web.config 将是导致此问题的主要原因,但如果已解决并且问题仍然存在,请检查您使用的是模型,而不是模型以在源代码中引用它。
我也遇到了这个问题。我的情况有点不同。
我的一个视图文件夹被意外移动到我的项目的根目录。这导致在 project_root/Views/SignUp/ViewName 之前匹配路由 project_root/SignUp/ViewName。这导致了@model 错误。将视图移回适当的位置后,该目录以某种方式在项目根目录中重新创建。这一次,空荡荡的。 /SignUp/ViewName 有效,但 /SignUp/ 抛出 403 - Forbidden: Access is denied.错误。必须从项目根目录中删除整个文件夹。
我希望这可以帮助别人。我花了几个小时相信这个问题是由我们最近从 MVC 3 升级到 MVC 4 引起的。请注意:升级问题应该只发生在 MVC 2 和 MVC 3 之间。如果您在以后的版本中看到这个问题,可能不是由于升级。
我花了很长时间才解决这个问题,但最后我希望我已经在 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 中有 Razor,所以我将 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}。
就这些。
<add key="webpages:Version" value="2.0.0.0" />
是驱动因素,但不需要其他设置。
3.0.0.0
,但是是的,这非常重要!
这是一个可怕的错误,但是:
确保您的远程视图中有 Web.config 文件。也许您跳过了通过您的 Ftp 程序的过滤器上传它。
我在 Areas/MyArea/Views/web.config 下缺少 web.config。一旦添加它工作正常。这是使用 MVC 5 和 .NET4.5
还有另一个原因。就我而言,我已将 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 后,我不再收到此错误。
检查视图目录上的配置文件。在为 MVC 4/5 添加密钥
重新安装nuget为我解决了
PM> Install-Package Microsoft.AspNet.Razor -Version 3.2.3
对我来说,这就是问题所在。该部分缺少整个块。
<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>
更新软件包后我遇到了同样的问题。我完成了您在本主题上面写的全部内容,但模型关键字的红色底层并没有消失。后来,找到了解决方案:刚刚从我的项目目录中删除了“包”文件夹并重建,同时允许 NuGet 恢复丢失的包。刷新,完成!
检查您的 web.config 文件是否应该存在于已发布的文件中
我遇到了同样的问题,然后我找到了解决方案。解决方案是:
关闭 Visual Studio 删除 SUO 文件 重启 Visual Studio
.suo 文件是 .svn 解决方案文件所在文件夹中的隐藏文件。希望,它会工作!
关闭 Visual Studio 并重新打开对我有用。一定是个奇怪的bug。
MAIN
web.config 文件<add key="webpages:Version" value="3.0.0.0" />
中更新到最新版本(此处为 MVC 5)