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

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

这是有问题的代码行:

@model ICollection<DataSourceByActive>

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

为什么会这样?我该怎么解决呢?


当前回答

以我为例,我最近从MVC 4更新到MVC 5,这把web搞砸了。配置很糟糕。这篇文章帮助很大。

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

底线是你需要检查你的网页中所有的版本号引用。config和Views/web。配置,以确保他们引用了与MVC 5相关的正确升级版本。

其他回答

现有的答案都不适合我,但我通过比较不同项目的.csproj文件找到了适合我的答案。下面对.csproj xml文件的手动编辑为我解决了剃刀智能感知问题,也许这可以帮助那些尝试了所有其他答案都无济于事的人。关键是删除<Reference>'s中<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>

我不知道它们是怎么来的,也不知道它们到底是干什么的,也许比我聪明的人可以补充这些信息。我很高兴终于解决了这个问题。

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

在我的例子中,是因为~/Views/Web。配置没有包含在项目中。

它在IIS Express中工作,但当我部署到azure时,我得到了同样的错误。由于没有包含在.csproj文件中,所以它没有被部署。

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

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

把它加进去,重新出版,就万事大吉了。

我有同样的问题,我创建了一个新的项目,并复制了网络。在Gupta的回答中推荐配置文件,但这并没有为我解决问题。我检查了Alex和Liam的答案,我认为这一行一定是从新网页上复制的。config,但它看起来像新项目本身没有这一行(MVC5):

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

添加一行到views/web。配置文件解决了我的问题。

在我的情况下,我在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>
    }

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