我在项目中添加了一个cshtml页面。当我尝试向其添加以下声明时,出现错误:“名称'model'在当前上下文中不存在”。
@model xyz.abc.SomeClass
我检查了引用,所有引用都到位。我在视图文件夹中添加了一个web.config,但是并没有解决它。
我有什么想念的吗?
我在项目中添加了一个cshtml页面。当我尝试向其添加以下声明时,出现错误:“名称'model'在当前上下文中不存在”。
@model xyz.abc.SomeClass
我检查了引用,所有引用都到位。我在视图文件夹中添加了一个web.config,但是并没有解决它。
我有什么想念的吗?
Answers:
更新:如果您使用的是MVC的较新版本,则将应用相同的过程,只需确保在web.config的<host>
行中使用正确的版本号即可。
好吧,我发现自己遇到了与您所做的相同的事情,经过进一步的研究,我发现了问题所在!
您需要为Views文件夹包含默认的MVC3 web.config。MVC3有两个:一个位于应用程序的根目录中,另一个位于views文件夹中。这有一部分包含的名称空间。确保您的外观如下所示:
<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复制到views文件夹中。
重要说明:完成此操作后,需要关闭文件并重新打开它。瞧!智慧!
MAIN
web.config文件中更新到最新版本(此处为MVC 5)<add key="webpages:Version" value="3.0.0.0" />
当我创建一个新区域来组织页面时,我遇到了同样的问题。我的结构看起来像:
网络项目
- [] Areas
- [] NewArea
- [] Controllers
- [] Views
- [] Controllers
- [] Views
- Web.config
- Web.config
在WebProject下的“视图”文件夹中创建的视图工作正常,但是在NewArea下创建的视图引发以下错误:
名称“模型”在当前上下文中不存在。
为了解决这个问题,我将WebProject下Views文件夹中的web.config复制到NewArea中的Views文件夹。见下文。
网络项目
- [] Areas
- [] NewArea
- [] Controllers
- [] Views
- **Web.config**
- [] Controllers
- [] Views
- Web.config
- Web.config
之所以遇到这个问题,是因为我使用添加->新文件夹来添加文件夹,从而手动创建了这个新区域。我应该右键单击该项目,然后选择添加->区域。这样,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>
而这在您的views文件夹中的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)的副本时,我遇到了这个问题。(不是views文件夹)将文件移出根目录后,问题就消失了。
使用VS2012和VS2013也有类似的问题。
将以下行添加到主web.config中的<appSettings>中可以正常工作:
<add key="webpages:Version" value="3.0.0.0" />
如果该行已经存在但显示为2.0.0.0,则将其更改为3.0.0.0即可。
更新:2015/5/5对于您的MVC 5项目,您需要在/views/web.config中将Version设置为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>
我也遇到了这个问题。我的情况有些不同。
我的一个视图文件夹被意外移动到了项目的根目录。这导致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之间发生。如果在以后的版本中看到此问题,则可能不是由于升级。
我花了很长时间才解决这个问题,但最终我希望我已经在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一起使用的
我遇到了同样的问题,但就我而言,唯一改变的是我卸载了Visual Studio 2012并安装了Visual Studio2013。我打开了解决方案,但我一直得到相同的解决方案 The name 'model' does not exist in current context
在每个Razor视图中都错误。
我的同事建议检查VS2013的更新。安装VS2013 Update 1之后,我停止出现此错误。
对我来说,这就是问题所在。该部分中缺少整个块。
<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>
检查您的web.config文件应该存在于已发布文件中
我遇到了同样的问题,然后找到了解决方案。解决方案是:
- 关闭Visual Studio
- 删除SUO文件
- 重新启动Visual Studio
该名为.suo文件是在同一文件夹中的隐藏文件的.svn解决方案文件存在。希望能成功!