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

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

这是有问题的代码行:

@model ICollection<DataSourceByActive>

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

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


当前回答

您可能会在代码中使用一个名为model的变量。

其他回答

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

安装- package Microsoft.AspNet.Mvc -Version 5.2.4

然后升级到最新的Razor版本

安装- package Microsoft.AspNet.Razor -Version 3.2.4

然后我改变了所有的网络。配置文件来反映更改。如下图所示:

在主网站上。配置文件,确保web页面:版本键的值是正确的。这是可以找到它的地方(忽略其他键):

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

运行时装配绑定应该显示“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中。配置部分,确保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的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>

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

…包含。= . x.x.x Mvc,版本。x……(在各个地方~\Views\web.config) …System.Web.WebPages。= . x.x.x剃须刀,版本。x……(在各个地方~\Views\web.config) <add key="webpages:Version" value=" x.x.x.x。"x" />(在~\web.config中

对我有用的组合:

组合1:

包含。= 4.0.0.0 Mvc,版本

System.Web.WebPages。剃须刀,版本= 2.0.0.0之间

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

结合2:

包含。= 5.2.7.0 Mvc,版本

System.Web.WebPages。= 3.0.0.0剃须刀,版本

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

最后一个观察是网页:版本设置似乎是可选的。删除它似乎没有负面影响,至少在当前问题的背景下是这样。

以我为例,我最近从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相关的正确升级版本。

我试图添加一个视图,这是我的“视图”文件夹(只是组织我的代码不同,我猜),当我有这个问题。在Views中创建视图(按照惯例)解决了这个问题。

把@Model改成@Model对我来说很管用。

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