在我的MVC 4应用程序中进行了重大重构之后,Razor在调试视图时显示了这个错误:
当前上下文中不存在名称“model”。
这是令人讨厌的代码行:
@model ICollection<DataSourceByActive>
我知道@model
的使用是正确的。
为什么会这样?我该如何解决?
答案 0 :(得分:216)
我认为你搞砸了位于Views文件夹中的web.config文件。
创建一个针对同一.NET框架的新项目,并将其Views / web.config文件复制到当前项目中的文件之上。这将解决您的问题。
另外,正如Dudeman3000评论的那样,如果你的MVC项目中有区域,那么它们也都有Views\web.config
个文件。
答案 1 :(得分:86)
确保您在web.config
部分的网站web.config和views目录appSettings
中都有以下内容
<add key="webpages:Version" value="2.0.0.0" />
对于MVC5使用:
<add key="webpages:Version" value="3.0.0.0" />
(它只存在于主Web.config文件中。)
答案 2 :(得分:39)
这是我做的:
.suo文件是与.svn解决方案文件位于同一文件夹中的隐藏文件,包含Visual Studio用户选项。
答案 3 :(得分:24)
我有同样的问题,我创建了一个新项目,并按照Gupta的回答中的建议复制了web.config文件,但这对我来说没有解决问题。我检查了Alex和Liam的回答,我认为这行必须是从新的web.config复制的,但看起来新项目本身没有这行(MVC5):
<add key="webpages:Version" value="3.0.0.0" />
将这一行添加到views / web.config文件为我解决了这个问题。
答案 4 :(得分:13)
更改视图文件夹的web.config中的以下行解决了同样的错误。
这
System.Collections.Generic.IEnumerable<Changeset>
要
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
答案 5 :(得分:10)
在我的情况下,我最近从MVC 4更新到MVC 5,这搞砸了web.config非常糟糕。这篇文章帮助很大。
最重要的是,您需要检查web.config和Views / web.config中的所有版本号引用,以确保它们引用与MVC 5关联的正确升级版本。
答案 6 :(得分:7)
我在Visual Studio 2019中使用了MVC4项目-事实证明VS 2019不支持现成的MVC 4。您必须安装它。
步骤:
注意:必须关闭Visual Studio
答案 7 :(得分:6)
我找到了解决方案。 如果您想更新剃刀版本或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
也必须改变。
答案 8 :(得分:6)
从@model改为@Model为我完成了这项工作。
@model表示View Model对象类型。 @Model表示View Model对象。
答案 9 :(得分:5)
就我而言,以下代码有用。将下面的代码放在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>
更新代码后,请务必清理并重建解决方案。我希望这会帮助你!
答案 10 :(得分:4)
没有一个现有的答案对我有用,但是通过比较不同项目的 routes: [
{
path: '/login',
name: 'Login',
component: Login
},
{
path: '/',
component: Index,
children: [
{
path: '/users',
name: 'Users',
component: Users
},
{
path: '/owners',
name: 'Owners',
component: Owners
},
{
path: '/writers',
component: Writers,
children: [
{
path: 'junior',
name: 'Junior',
component: JuniorWriters
},
{
path: 'senior',
name: 'Senior',
component: SeniorWriters
}
]
}
]
}
]
文件,我发现了没有成功对我有用。以下对.csproj
XML文件的手动编辑为我解决了Razor-intellisense问题,也许这可以帮助尝试了所有其他答案的其他人无济于事。关键是要删除.csproj
中的<Private>False</Private>
的所有实例:
<Reference>
我不知道那些人是怎么到达那里的或者他们到底是做什么的,也许比我聪明的人可以添加这些信息。我很高兴终于解决了这个问题。
答案 11 :(得分:2)
出于某种原因,我的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>
答案 12 :(得分:1)
在我的情况下,问题是在将项目从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%)。
答案 13 :(得分:1)
在部署到Azure应用服务时,我遇到了同样的问题
在我的情况下,这是因为〜/ Views / Web.config没有包含在项目中。
它在IIS Express中工作,但是当我部署到Azure时,我遇到了同样的错误。由于未包含在.csproj文件中,因此未部署它。
解决方案是确保〜/ Views / Web.config包含在项目中。
如果转到解决方案资源管理器并单击“显示所有文件”图标,然后打开“视图”,则可能会在其中查看未包含的Web.config文件。
添加它,重新发布,然后鲍勃成为你的叔叔。
答案 14 :(得分:1)
对我来说,问题是我最近导入的一个库中存在冲突的.NET版本。我导入的库是为4.5.2和ASP.NET MVC站点编译的,我将它导入到目标4.5。重新编译4.5的lib后,该网站将被编译。
此外,没有编译错误,但该问题被报告为“警告”。因此,如果有任何警告,请务必阅读所有警告。
答案 15 :(得分:0)
当我遇到这个问题时,我试图在我的“Views”文件夹之外添加一个视图(只是以不同方式组织我的代码)。在视图中创建视图(按照惯例)解决了它。
答案 16 :(得分:0)
在我的情况下,我在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>
}
答案 17 :(得分:0)
为了解决这个问题,我确保使用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应该显示&#34; newversion&#34;同样,看看它在哪里读取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
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>
答案 18 :(得分:0)
如果你像我一样对你的项目没有任何改变就解决了这个问题, 您需要更改放置在View Folder中的web.config。 只需按Enter或删除空行写新行。然后保存您的web.config并重建。 用这个解决方案解决了我的问题
答案 19 :(得分:0)
就我而言,我是无意中从Views文件夹中删除了web.config文件。我把它加回来了,没关系。
答案 20 :(得分:0)
这里似乎存在3个版本号设置,彼此之间必须正确:
... System.Web.Mvc, Version=x.x.x.x ...
(在各个地方〜\ Views \ web.config)... System.Web.WebPages.Razor, Version=x.x.x.x ...
(在各个地方〜\ Views \ web.config)<add key="webpages:Version" value="x.x.x.x" />
(在〜\ web.config中) NB:根web.config 对我有用的组合:
组合1:
System.Web.Mvc, Version=4.0.0.0
System.Web.WebPages.Razor, Version=2.0.0.0
<add key="webpages:Version" value="2.0.0.0" />
组合2:
System.Web.Mvc, Version=5.2.7.0
System.Web.WebPages.Razor, Version=3.0.0.0
<add key="webpages:Version" value="3.0.0.0" />
最后的观察结果是webpages:Version
设置似乎是可选的。至少在当前问题的情况下,删除它似乎没有负面影响。
答案 21 :(得分:0)
我在 nopCommerce 中遇到了这个问题,我将插件的视图部分复制到 nopcommerce\Plugins 下的输出文件夹,但该视图需要是嵌入式资源。所以 .csthml 文件的错误构建操作是“内容”,它应该是“嵌入式资源”,不需要复制。
答案 22 :(得分:-3)
我在打印变量时使用@Model
而不是model
来解决问题。
答案 23 :(得分:-8)
您可能会在代码中使用名为model
的变量。