我在项目中添加了一个cshtml页面。当我尝试添加以下声明时,出现错误:“当前上下文中不存在'model'名称”。
@model xyz.abc.SomeClass
我检查了引用,它们都在正确的位置。我在视图文件夹中添加了一个 web.config,但那并没有解决问题。
我是否漏掉了什么?
我在项目中添加了一个cshtml页面。当我尝试添加以下声明时,出现错误:“当前上下文中不存在'model'名称”。
@model xyz.abc.SomeClass
我检查了引用,它们都在正确的位置。我在视图文件夹中添加了一个 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文件复制到你的views文件夹中。
重要提示:一旦完成上述操作,你需要关闭并重新打开该文件。就这样!智能感知功能就有了!
MAIN
web.config文件中更新到最新版本(对于MVC 5,这里是<add key="webpages:Version" value="3.0.0.0" />
)。 - Simon_WeaverWebProject
- [] Areas
- [] NewArea
- [] Controllers
- [] Views
- [] Controllers
- [] Views
- Web.config
- Web.config
在WebProject的Views文件夹下创建的视图运行良好,但是在NewArea下创建的视图会抛出以下错误:
当前上下文中不存在名称为'model'的变量。
为了解决这个问题,我将WebProject的Views文件夹中的web.config复制到NewArea的Views文件夹中。参见下面的内容。
WebProject
- [] 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版本,而我有一个第三方区域引用了4.0版本,并与视图一起配合。我将Views/Web.config
设置回了v4.0,一切都正常了。 - Codes with Hammer如果您的视图在类库程序集中,这对于在项目之间共享视图非常有用,那么仅按照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网站中引用它。
我曾经在使用VS2012和VS2013时遇到过类似的问题。
在主web.config的<appSettings>中添加以下行代码即可解决:
<add key="webpages:Version" value="3.0.0.0" />
如果已经有这一行,但是显示的是2.0.0.0,将其更改为3.0.0.0即可。
我遇到了这个问题,原因是我在根目录下意外地复制了视图文件(About.cshtml),而该路由的路径是/about。一旦我将该文件移出根目录,问题就解决了。
<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>
```python model = YourModel() ```
@model MyModel
您需要在以下关于 IT 的引用中使用大写字母,例如:
@Html.Encode(Model.MyDisplayValue)
我相信Views文件夹中缺少web.config是造成这个问题的主要原因,但如果已经修复了这个问题仍然存在,那么请检查在源代码中是否使用 Model 而不是 model 来引用它。
project_root/SignUp/ViewName
与project_root/Views/SignUp/ViewName
之前的匹配。这导致了@model
错误。/SignUp/ViewName
可以正常工作,但是/SignUp/
会抛出403 - Forbidden: Access is denied.
错误。必须从项目根目录中删除整个文件夹。这是一个可怕的错误,但是:
请确保在你的Remote中的View文件夹下有Web.config文件。也许你在使用FTP程序上传时跳过了它,需要检查一下FTP程序的筛选器。
我在Areas/MyArea/Views目录下缺少web.config文件,添加后问题得以解决。这是使用MVC 5和.NET4.5时的情况。