ASP.NET MVC5中当前上下文中不存在名称为“Model”的内容。

7
我正在编写一个针对NopCommerce 3.2的插件,但在视图中出现了上述错误,同时也出现了“Layout”和“Html”的错误。我已将另一个插件中有效的Web.Config复制到了此处。我还添加了与工作插件相同的引用。编译插件时可以正常通过,但是我没有智能提示,并且无法确信 VisualStudio 正确标记错误。我使用的是 VS2013 Professional Update 1。
以下是 Web.Config 文件:
<?xml version="1.0" encoding="utf-8"?>

<!-- We use this file to make razor intellisense work in the class library -->




<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>
  <appSettings>
    <add key="webpages:Version" value="3.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="PreserveLoginUrl" value="true" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>
  <system.web>
    <compilation targetFramework="4.5" />
    <pages
    validateRequest="false"
    pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
    pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
    userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <controls>
        <add assembly="System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
      </controls>
      <namespaces>
        <add namespace="System.Web.Helpers" />
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.WebPages" />
      </namespaces>
    </pages>
  </system.web>
  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="Nop.Web.Framework.ViewEngines.Razor.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>
</configuration>

编辑:如果您认为这个问题没有经过研究,我很抱歉,但我向您保证我已经花了数小时尝试找到解决方案(包括那些我在stackoverflow上找到的类似问题,并指出web.config文件是问题所在的原因,这也是我在问题中包含该文件的原因),但是无法找到。


你没有复制完全相同的整个项目吗? - Ramesh Rajendran
我使用了其他项目的部分内容(就像我最近创建的其他插件一样),但没有复制整个项目。你的意思是复制工作项目并在其中切换代码?问题是我有约30个项目不再工作,只有几个项目能够正常工作。我不知道它们为什么突然停止工作,但可能是由于nuget包的更新引起的。不明白为什么有些项目还能正常工作... - hjd
可能是Razor视图抛出“当前上下文中不存在'model'的名称”的重复问题。 - Michael Freidgeim
10个回答

5

这个错误很可能是由Resharper引起的。我们是一个使用GIT的三人开发团队。我们其中一位安装了Resharper,这很可能导致另外两位成员出现了错误。当我们安装Resharper试用版时,它突然又可以正常工作了。但是,如果卸载Resharper后,它就无法正常工作了...


我也遇到了类似的问题。代码可以编译并运行,但是Intellisense却无法工作,并显示“Model名称不存在”的消息。由于安装了Resharper后导致VS出现问题,试用版已过期,所以我卸载了Resharper,但Intellisense仍然无法正常工作。 - JP Hellemons
1
我可以确认无法检测@ model是由于我的ReSharper Ultimate扩展。我禁用了ReSharper,退出了VS 2017,打开了VS 2017,清理了项目,重新启用了ReSharper。@ model的智能感知红线消失了。 - Jimmy Shaw

2
请尝试将以下部分添加到system.web中。(请确保我所添加的版本确实是您所使用的版本)
<compilation targetFramework="4.5">
  <assemblies>
    <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.Helpers, Version=2.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.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  </assemblies>
</compilation>

关闭.cshtml视图文件。重新构建项目。然后再次打开它们。

尝试过了,但仍然不起作用。我该如何检查使用哪个版本?在Nuget中,它显示System.Web.WebPages的版本为3.1.1,但当我在空模板中使用它时,我总是得到版本3.0.0.0。 - hjd

2
卸载项目MVC Nuget包并重新安装解决了我的问题。当我更改了项目的.net版本时,我的MVC Nuget包出现了故障。

在我的VS 2015 RTM中有效。 - vbocan

1

将现有的应用程序从MVC 4移植到MVC5后出现了相同的问题。 - Steve Pettifer

1
项目输出路径更改为所有配置中的/bin,在项目属性中进行设置。这很奇怪,但似乎当VS 项目输出被推送到/bin/Debug/bin/Release时,智能感知会完全崩溃。

project properties


1
如果您将项目属性更改为目标4.5.1,
许多其他地方的targetFramework仍将显示45
您可以在根web.config中找到3-4次的targetFramework
以及各种packages.config。
我遇到了同样的问题,将项目更改为目标4.5即可解决。
最好不要以4.5.1为目标。

你救了我的晚上。不确定为什么会发生这种情况。尝试了各种方法,但什么都没发生。 - nguyenhoai890

1

确保你在视图中定义的命名空间与你的模型的命名空间匹配。


视图中的命名空间定义(使用...)与模型中的匹配。 - hjd

1

我在我的MVC 5项目中遇到了同样的错误。我的情况是Views文件夹中的Web.config没有被发布出去。将其添加回来解决了问题。


1

在我的情况下,我需要通过关闭Visual Studio并删除此文件夹来重置Visual Studio组件缓存:

C:\Users\[username]\AppData\Local\Microsoft\VisualStudio\14.0\ComponentModelCache


0

我曾经遇到过同样的错误,只是进行了更改

<pages pageBaseType="Nop.Web.Framework.ViewEngines.Razor.WebViewPage">

<pages pageBaseType="System.Web.Mvc.WebViewPage">

我只是想在控制台应用程序中获得cshtml智能感知,所以对我来说最好回到标准的基本Webviewpage。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接