在我的MVC 4应用程序中进行重大重构之后,Razor在调试视图时显示了此错误:
名称“模型”在当前上下文中不存在。
这是令人反感的代码行:
@model ICollection<DataSourceByActive>
我知道的用法@model
是正确的。
为什么会这样呢?我该如何解决?
在我的MVC 4应用程序中进行重大重构之后,Razor在调试视图时显示了此错误:
名称“模型”在当前上下文中不存在。
这是令人反感的代码行:
@model ICollection<DataSourceByActive>
我知道的用法@model
是正确的。
为什么会这样呢?我该如何解决?
Answers:
我认为您搞砸了位于Views文件夹中的web.config文件。
创建一个针对相同.NET框架的新项目,并将其Views / web.config文件复制到当前项目中的Views / web.config文件之上。这将解决您的问题。
另外,正如Dudeman3000所评论的那样,如果您的MVC项目中有Areas,则它们也都具有Views\web.config
文件。
This will fix your problem.
它没有。
确保该部分的站点Web.config
和views目录Web.config
中都包含以下appSettings
内容
<add key="webpages:Version" value="2.0.0.0" />
对于MVC5,请使用:
<add key="webpages:Version" value="3.0.0.0" />
(并且它仅存在于主Web.config
文件中。)
3.0.0.0
。(并且它仅存在于主 Web.config文件中。)
2.0.0.0
而不是3.0.0.0
。改变那解决了问题。谢谢!
这是我所做的:
.suo文件是与.svn解决方案文件位于同一文件夹中的隐藏文件,并包含Visual Studio用户选项。
web.config
适用于ASP.NET Core
应用程序的文件,因此这对我有用(还添加了一些扩展以改善智能感知)。
.vs
文件夹有所帮助。
我遇到了同样的问题,我创建了一个新项目,并按照Gupta的答案中的建议复制了web.config文件,但这并不能解决我的问题。我检查了Alex和Liam的回答,我认为这行必须从新的web.config复制而来,但是看起来新项目本身没有此行(MVC5):
<add key="webpages:Version" value="3.0.0.0" />
将行添加到views / web.config文件为我解决了这个问题。
更改视图文件夹的web.config中的以下行可解决相同的错误。
从
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
至
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
System.Web.Mvc
程序集参考以确认所需的主要版本。
就我而言,我最近从MVC 4更新到了MVC 5,这严重破坏了web.config。这篇文章提供了极大的帮助。
最重要的是,您需要检查web.config和Views / web.config中的所有版本号引用,以确保它们引用的是与MVC 5相关的正确升级版本。
我找到了解决方案。如果要将剃刀版本或mvc 4更新为5,请更改一些行。
Views / web.config中的旧代码
<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>
替换为
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>
sectionGroup
也必须改变。
就我而言,以下代码非常有用。将以下代码放置在Views文件夹下的Web.config文件中。
<configSections>
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>
</configSections>
更新代码后,请确保清洁并重建解决方案。希望这对您有所帮助!
现有的答案都不为我工作,但我找到了做比较的工作对我来说.csproj
不同的项目文件。以下对.csproj
XML文件的手动编辑为我解决了Razor-intellisense问题,也许这可以帮助尝试了所有其他答案的其他人都无济于事。关键是去除的任何实例<Private>False</Private>
中<Reference>
的:
<ItemGroup>
<Reference Include="Foo">
<HintPath>path\to\Foo</HintPath>
<!-- <Private>False</Private> -->
</Reference>
<Reference Include="Bar">
<HintPath>path\to\Bar</HintPath>
<!-- <Private>True</Private> -->
</Reference>
</ItemGroup>
我不知道这些人是怎么到达那里的或者他们到底是做什么的,也许比我聪明的人可以添加这些信息。我很高兴终于解决了这个问题。
由于某种原因,我的web.config 在oldVersion属性中具有0.0.0.0:
<runtime>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>
</runtime>
解决方案更改为1.0.0.0:
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0"/>
</dependentAssembly>
就我而言,问题是将项目从MVC 4升级到MVC 5后,我不知何故错过了Views / web.config中的版本更改:
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
它仍然具有旧的2.0.0.0版本。将版本更改为3.0.0.0后,一切都开始正常工作。
同样,由于这个问题,每次我打开一个.cshtml文件时,Visual Studio 2015 Community Edition都会开始对CPU进行猛击(空闲时占30-40%)。
为了解决这个问题,我确保使用NuGet和Package Manager Console升级到了最新的MVC版本。
安装软件包Microsoft.AspNet.Mvc-版本5.2.4
然后升级到最新的Razor版本
安装软件包Microsoft.AspNet.Razor-版本3.2.4
然后,我更改了所有web.config文件以反映更改。正如您将在下面看到的:
在主要的web.config文件中,确保webpages:version正确。在这里可以找到它(忽略其他键):
<configuration>
<appSettings>
<add key="webpages:Version" value="3.0.0.0"/>
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>
</configuration>
然后查找程序集中列出的其他版本,对照项目参考中列出的库版本检查程序集的版本!您可能不需要所有这些。
<system.web>
<compilation debug="true" targetFramework="4.6">
<assemblies>
<add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Web.Helpers, Version=3.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=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</assemblies>
</compilation>
</system.web>
运行时assemblyBinding也应显示“ newversion”,请参见在哪里读取NewVersion 5.2.4.0?还要检查所有其他版本。
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Razor" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-5.2.4.0" newVersion="5.2.4.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
然后在“ Views Web.Config”部分中,确保Razor是正确的版本:
<configuration>
<configSections>
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>
</configSections>
<configuration>
Lastlt是Views Web.Config的Pages部分
<pages
validateRequest="false"
pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<controls>
<add assembly="System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
</controls>
</pages>
当我遇到此问题时,我试图添加一个位于“ Views”文件夹之外的视图(我想只是为了以不同的方式组织我的代码)。在视图内部创建视图(按照约定)解决了该问题。
就我而言,我在foreach的开头缺少@
@foreach (var item in Model)
{
<tr class="clickable-row">
<td class="clickable-field">
@Html.DisplayFor(modelItem => item.Label)
</td>
<td class="clickable-field hidden-xs">
@Html.DisplayFor(modelItem => item.Value)
</td>
</tr>
}
您可能会在代码中使用名为的变量model
。