226

在我的 MVC 4 应用程序中进行重大重构后,Razor 在调试视图时显示此错误:

当前上下文中不存在名称“模型”。

这是有问题的代码行:

@model ICollection<DataSourceByActive>

我知道的用法@model是正确的。

为什么会这样?我该如何解决?

4

25 回答 25

279

我认为您弄乱了位于 Views 文件夹中的 web.config 文件。

创建一个针对相同 .NET 框架的新项目,并将其 Views/web.config 文件复制到当前项目中的那个之上。这将解决您的问题。

此外,正如 Dudeman3000 评论的那样,如果您的 MVC 项目中有区域,它们也都有Views\web.config文件。

于 2013-10-31T01:44:28.977 回答
110

确保您的站点和该部分的Web.config视图目录中都有以下内容Web.configappSettings

<add key="webpages:Version" value="2.0.0.0" />

对于 MVC5 使用:

<add key="webpages:Version" value="3.0.0.0" />

(而且它只存在于主Web.config文件中。)

于 2014-05-13T14:30:01.040 回答
53

这是我所做的:

  1. 关闭 Visual Studio
  2. 删除 SUO 文件
  3. 重新启动 Visual Studio

.suo 文件是与 .svn 解决方案文件位于同一文件夹中的隐藏文件,并且包含 Visual Studio 用户选项。

于 2015-10-12T19:53:52.687 回答
26

我遇到了同样的问题,我创建了一个新项目并按照 Gupta 的回答中的建议复制了 web.config 文件,但这并没有为我解决问题。我检查了 Alex 和 Liam 的回答,我认为这行肯定是从新的 web.config 复制的,但看起来新项目本身没有这行(MVC5):

<add key="webpages:Version" value="3.0.0.0" />

将该行添加到 views/web.config 文件为我解决了这个问题。

于 2014-11-13T07:26:19.010 回答
19

更改视图文件夹的 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" />
于 2016-02-04T03:10:51.337 回答
12

我在 Visual Studio 2019 中使用了 MVC4 项目——结果发现 VS 2019 不支持开箱即用的 MVC 4。你必须安装这个。

脚步:

  • 打开 Visual Studio 安装程序(在 windows 中搜索 Visual Studio 安装程序)
  • 单击单个组件
  • 在搜索框中输入“mvc”
  • 检查 mvc4-box
  • 点击右下角的“修改”

注意:Visual Studio 需要关闭

在此处输入图像描述

于 2020-05-13T11:28:41.447 回答
11

从@model 更改为@Model 为我完成了这项工作。

@model 表示视图模型对象类型。@Model 代表视图模型对象。

于 2018-03-13T22:30:18.167 回答
10

就我而言,我最近从 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 关联的正确升级版本。

于 2015-02-27T19:59:28.330 回答
9

我找到了解决方案。如果要将 razor 版本或 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也必须改变。

于 2017-06-07T12:01:04.130 回答
7

就我而言,以下代码很有用。将以下代码放在 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>

更新代码后,请确保清理并重建解决方案。我希望这会帮助你!

于 2015-11-18T10:51:30.863 回答
5

现有的答案都不适合我,但通过比较不同项目的文件,我发现什么对我有用。.csproj以下对.csprojXML 文件的手动编辑为我解决了 Razor-intellisense 问题,也许这可以帮助其他尝试了所有其他答案但无济于事的人。关键是删除's<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>

我不知道那些人是如何到达那里的,也不知道他们到底做了什么,也许比我更聪明的人可以添加这些信息。我很高兴终于解决了这个问题。

于 2018-08-20T16:13:26.610 回答
3

出于某种原因,我的 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>
于 2018-10-24T17:22:49.550 回答
3

部署到 Azure 应用服务时遇到了同样的问题

就我而言,这是因为 ~/Views/Web.config 未包含在项目中。

它在 IIS Express 中工作,但是当我部署到 azure 时,我得到了同样的错误。由于未包含在 .csproj 文件中,因此未部署它。

解决方案是确保 ~/Views/Web.config 包含在项目中。

如果您转到解决方案资源管理器并单击“显示所有文件”图标,然后打开视图,您可能会在那里看到一个未包含的 Web.config 文件。

添加它,重新发布,鲍勃就是你的叔叔。

于 2019-03-06T13:47:32.157 回答
2

就我而言,问题是在将项目从 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 后,一切都开始正常工作。

此外,由于这个问题,Visual Studio 2015 社区版会在我每次打开 .cshtml 文件时开始抨击 CPU(空闲时的使用率为 30-40%)。

于 2015-11-10T08:03:03.720 回答
1

对我来说,问题是我最近导入的其中一个库中的 .NET 版本存在冲突。我导入的库是为 4.5.2 编译的,我将 ASP.NET MVC 站点导入到目标 4.5。在为 4.5 重新编译上述 lib 后,该网站将编译。

此外,没有编译错误,但该问题被报告为“警告”。因此,如果有任何警告,请务必阅读所有警告。

于 2015-08-13T16:19:21.143 回答
1

为了解决这个问题,我确保我使用 NuGet 和包管理器控制台升级到了最新的 MVC 版本。

安装包 Microsoft.AspNet.Mvc -Version 5.2.4

然后升级到最新的 Razor 版本

安装包 Microsoft.AspNet.Razor -Version 3.2.4

然后我更改了所有 web.config 文件以反映更改。正如您将在下面看到的:

在主 web.config 文件中,确保valueforwebpages:Version密钥正确。这是可以找到它的地方(忽略其他键):

<configuration>
 <appSettings>
   <add key="webpages:Version" value="3.0.0.0"/>
   <add key="ClientValidationEnabled" value="true"/>
   <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
 </appSettings>
</configuration>

然后查找程序集中列出的其他版本,根据Version项目引用中列出的库版本检查程序集的版本!您可能不需要所有这些。

<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>

runtime assemblyBinding也应该显示“新版本”,看看它在哪里读取newVersion5.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 部分中,确保这System.Web.WebPages.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>

最后是 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>
于 2018-02-16T21:36:24.257 回答
1

如果您像我一样在没有对项目进行任何更改的情况下解决此问题,则需要更改放置在查看文件夹中的 web.config。只需通过 Enter 或 Remove a empty line 编写新行。然后保存您的 web.config 并重建。我的问题用这个解决方案解决了

于 2018-06-18T14:19:09.360 回答
0

当我遇到这个问题时,我试图添加一个位于我的“视图”文件夹之外的视图(我猜只是为了以不同的方式组织我的代码)。在 Views 中创建视图(按照惯例)解决了它。

于 2016-10-27T07:12:56.857 回答
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>
    }
于 2017-08-30T23:27:29.087 回答
0

就我而言,我意外地从 Views 文件夹中删除了 web.config 文件。我加回来了,没问题。

于 2018-08-05T18:47:22.890 回答
0

这里似乎有 3 个版本号设置需要相互正确:

  1. ... System.Web.Mvc, Version=x.x.x.x ...(在各个地方~\Views\web.config)
  2. ... System.Web.WebPages.Razor, Version=x.x.x.x ...(在各个地方~\Views\web.config)
  3. <add key="webpages:Version" value="x.x.x.x" />(在 ~\web.config 中)注意:root web.config

对我有用的组合:

组合一:

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设置似乎是可选的。至少在当前问题的背景下,删除它似乎没有负面影响。

于 2020-10-13T17:13:38.920 回答
0

我在 nopCommerce 中遇到了这个问题,我将插件的视图部分复制到 nopcommerce\Plugins 下的输出文件夹,但视图需要是嵌入式资源。因此.csthml 文件的错误构建操作是“内容”,它应该是“嵌入式资源”,不需要复制。

于 2021-07-10T09:23:53.403 回答
0

已经7年了。但是,我的情况有点不同。

所有视图都运行良好。因此,更改 web.config 和 nuget 以获取新库将不起作用,并且可能会引入问题。

我的场景是我一直在做项目 B。项目 B 是项目 A 的克隆。长话短说,很多时间,为了节省时间,我必须将代码从项目 B 复制到项目 A。

这一次,我只是将文件abc.cshtml从项目B复制到项目A中。项目B是使用2015开发的。由于某种原因,这导致了问题。我不知道。无论如何,我删除了 abc.cshtml 并从头开始创建空白 abc.cshtml。然后我选择项目 B 中 abc.cshtml 上的所有内容,并将所有文本复制到项目 A 新创建的 abc.cshtml 中。

我解决了我的问题

于 2021-09-03T16:20:01.470 回答
-2

我通过使用@Model而不是仅model在打印变量时解决了这个问题。

于 2015-08-19T14:25:23.720 回答
-9

您可能会在代码中使用名为model.

于 2015-12-11T09:45:02.827 回答