在我的MVC 4应用程序中进行了重大的重构之后,Razor在调试Views时显示了这个错误:
当前上下文中不存在名称“model” .
这是令人讨厌的代码行:
@model ICollection<DataSourceByActive>
我知道 @model 的用法是正确的 .
@model
为什么会这样?我该如何解决?
我认为你搞砸了位于Views文件夹中的web.config文件 .
创建一个针对同一.NET框架的新项目,并将其Views / web.config文件复制到当前项目中的文件之上 . 这将解决您的问题 .
此外,正如Dudeman3000评论的那样,如果你的MVC项目中有区域,那么它们也都有 Views\web.config 文件 .
Views\web.config
确保在 appSettings 部分的站点web.config和views目录 web.config 中都有以下内容
appSettings
web.config
<add key="webpages:Version" value="2.0.0.0" />
对于MVC5使用:
<add key="webpages:Version" value="3.0.0.0" />
(它只存在于主Web.config文件中 . )
这是我做的:
关闭Visual Studio
删除SUO文件
重新启动Visual Studio
.suo文件是与.svn解决方案文件位于同一文件夹中的隐藏文件,包含Visual Studio用户选项 .
我遇到了同样的问题,我创建了一个新项目,并按照Gupta的回答中的建议复制了web.config文件,但这并没有为我解决问题 . 我检查了Alex和Liam的回答,我认为这行必须是从新的web.config复制的,但看起来新项目本身没有这行(MVC5):
将行添加到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" />
在我的情况下,我最近从MVC 4更新到MVC 5,这搞砸了web.config非常糟糕 . 这篇文章帮助很大 .
http://www.asp.net/mvc/overview/releases/how-to-upgrade-an-aspnet-mvc-4-and-web-api-project-to-aspnet-mvc-5-and-web-api-2
最重要的是,您需要检查web.config和Views / web.config中的所有版本号引用,以确保它们引用与MVC 5关联的正确升级版本 .
我找到了解决方案 . 如果要更新剃刀版本或mvc 4到5,请更改一些行 .
Old code in 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>
Replaced with
<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 也必须改变 .
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>
代码更新后,请确保清理并重建解决方案 . 我希望这会帮助你!
从@model改为@Model为我完成了这项工作 .
@model表示View Model对象类型 . @Model表示View Model对象 .
现有的答案都不适合我,但我通过比较不同项目的 .csproj 文件找到了 did 对我有用的东西 . 以下对 .csproj XML文件的手动编辑为我解决了Razor-intellisense问题,也许这可以帮助其他尝试过所有其他答案的人无济于事 . 关键是删除 <Reference> 中的 <Private>False</Private> 的任何实例:
.csproj
<Reference>
<Private>False</Private>
<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>
我不知道那些人是如何到达那里或者他们做了什么,也许比我聪明的人可以添加这些信息 . 我很高兴终于解决了这个问题 .
对我来说,问题是我最近导入的一个库中存在冲突的.NET版本 . 我导入的库是为4.5.2和ASP.NET MVC站点编译的,我将它导入到目标4.5 . 重新编译4.5的lib后,该网站将被编译 .
此外,没有编译错误,但该问题被报告为“警告” . 因此,如果有任何警告,请务必阅读所有警告 .
在我的例子中,问题是在将项目从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%) .
出于某种原因,我的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>
部署到Azure应用服务时遇到了同样的问题
在我的情况下,这是因为〜/ Views / Web.config未包含在项目中 .
它在IIS Express中有效,但当我部署到azure时,我得到了同样的错误 . 由于未包含在.csproj文件中,因此未部署 .
解决方案是确保〜/ Views / Web.config包含在项目中 .
如果您转到解决方案资源管理器并单击“显示所有文件”图标,然后打开视图,您可能会在其下看到未包含的Web.config文件 .
添加它,重新发布,然后是你的叔叔 .
当我遇到这个问题时,我试图在我的“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> }
为了解决这个问题,我确保使用NuGet和Package Manager Console升级到最新的MVC版本 .
安装包Microsoft.AspNet.Mvc -Version 5.2.4
然后升级到最新的Razor版本
安装包Microsoft.AspNet.Razor -Version 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>
如果您像我一样在没有对项目进行任何更改时解决此问题,则需要更改放置在View文件夹中的web.config . 只需按Enter或删除空行写新行 . 然后保存您的web.config并重建 . 这个解决方案解决了我的问题
就我而言,我偶然从Views文件夹中删除了web.config文件 . 我把它加回来了,没关系 .
我在打印变量时使用 @Model 而不是 model 来解决问题 .
@Model
model
您可能会在代码中使用名为 model 的变量 .
21 回答
我认为你搞砸了位于Views文件夹中的web.config文件 .
创建一个针对同一.NET框架的新项目,并将其Views / web.config文件复制到当前项目中的文件之上 . 这将解决您的问题 .
此外,正如Dudeman3000评论的那样,如果你的MVC项目中有区域,那么它们也都有
Views\web.config
文件 .确保在
appSettings
部分的站点web.config和views目录web.config
中都有以下内容对于MVC5使用:
(它只存在于主Web.config文件中 . )
这是我做的:
关闭Visual Studio
删除SUO文件
重新启动Visual Studio
.suo文件是与.svn解决方案文件位于同一文件夹中的隐藏文件,包含Visual Studio用户选项 .
我遇到了同样的问题,我创建了一个新项目,并按照Gupta的回答中的建议复制了web.config文件,但这并没有为我解决问题 . 我检查了Alex和Liam的回答,我认为这行必须是从新的web.config复制的,但看起来新项目本身没有这行(MVC5):
将行添加到views / web.config文件为我解决了这个问题 .
更改视图文件夹的web.config中的以下行解决了相同的错误 .
从
至
在我的情况下,我最近从MVC 4更新到MVC 5,这搞砸了web.config非常糟糕 . 这篇文章帮助很大 .
http://www.asp.net/mvc/overview/releases/how-to-upgrade-an-aspnet-mvc-4-and-web-api-project-to-aspnet-mvc-5-and-web-api-2
最重要的是,您需要检查web.config和Views / web.config中的所有版本号引用,以确保它们引用与MVC 5关联的正确升级版本 .
我找到了解决方案 . 如果要更新剃刀版本或mvc 4到5,请更改一些行 .
Old code in Views/web.config
Replaced with
sectionGroup
也必须改变 .在我的例子中,以下代码有用 . 将下面的代码放在Views文件夹下的Web.config文件中 .
代码更新后,请确保清理并重建解决方案 . 我希望这会帮助你!
从@model改为@Model为我完成了这项工作 .
@model表示View Model对象类型 . @Model表示View Model对象 .
现有的答案都不适合我,但我通过比较不同项目的
.csproj
文件找到了 did 对我有用的东西 . 以下对.csproj
XML文件的手动编辑为我解决了Razor-intellisense问题,也许这可以帮助其他尝试过所有其他答案的人无济于事 . 关键是删除<Reference>
中的<Private>False</Private>
的任何实例:我不知道那些人是如何到达那里或者他们做了什么,也许比我聪明的人可以添加这些信息 . 我很高兴终于解决了这个问题 .
对我来说,问题是我最近导入的一个库中存在冲突的.NET版本 . 我导入的库是为4.5.2和ASP.NET MVC站点编译的,我将它导入到目标4.5 . 重新编译4.5的lib后,该网站将被编译 .
此外,没有编译错误,但该问题被报告为“警告” . 因此,如果有任何警告,请务必阅读所有警告 .
在我的例子中,问题是在将项目从MVC 4升级到MVC 5之后,我错过了Views / web.config中的版本更改:
它仍然有旧的2.0.0.0版本 . 将版本更改为3.0.0.0后,一切正常 .
此外,由于此问题,每次打开.cshtml文件时,Visual Studio 2015 Community Edition都会开始抨击CPU(空闲时使用率为30-40%) .
出于某种原因,我的web.config在oldVersion属性中有 0.0.0.0 :
更改为 1.0.0.0 是解决方案:
部署到Azure应用服务时遇到了同样的问题
在我的情况下,这是因为〜/ Views / Web.config未包含在项目中 .
它在IIS Express中有效,但当我部署到azure时,我得到了同样的错误 . 由于未包含在.csproj文件中,因此未部署 .
解决方案是确保〜/ Views / Web.config包含在项目中 .
如果您转到解决方案资源管理器并单击“显示所有文件”图标,然后打开视图,您可能会在其下看到未包含的Web.config文件 .
添加它,重新发布,然后是你的叔叔 .
当我遇到这个问题时,我试图在我的“Views”文件夹之外添加一个视图(只是以不同方式组织我的代码) . 在视图中创建视图(按照惯例)解决了它 .
在我的情况下,我在foreach的开头就错过了@
为了解决这个问题,我确保使用NuGet和Package Manager Console升级到最新的MVC版本 .
安装包Microsoft.AspNet.Mvc -Version 5.2.4
然后升级到最新的Razor版本
安装包Microsoft.AspNet.Razor -Version 3.2.4
然后我更改了所有web.config文件以反映更改 . 正如您将在下面看到的:
在主web.config文件中,确保webpages:version正确无误 . 这是它可以找到的地方(忽略其他键):
然后查找程序集中列出的其他版本,根据项目引用中列出的库版本检查程序集的版本!您可能不需要所有这些 .
运行时assemblyBinding也应该显示“newversion”,看看它在哪里读取NewVersion 5.2.4.0?但也检查所有其他版本 .
那么在Views Web.Config部分中,确保Razor是正确的版本:
而Lastlt则是Views Web.Config的Pages部分
如果您像我一样在没有对项目进行任何更改时解决此问题,则需要更改放置在View文件夹中的web.config . 只需按Enter或删除空行写新行 . 然后保存您的web.config并重建 . 这个解决方案解决了我的问题
就我而言,我偶然从Views文件夹中删除了web.config文件 . 我把它加回来了,没关系 .
我在打印变量时使用
@Model
而不是model
来解决问题 .您可能会在代码中使用名为
model
的变量 .