[Asp.net-Mvc] Razor视图抛出“名称'模型'在当前上下文中不存在”



Answers

请确保您在appSettings部分的网站web.config和views目录web.config中都具有以下内容

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

对于MVC5使用:

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

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

Question

我只是在我的MVC 4应用程序中做了一堆重构,现在我正在尝试去调试我的Views,Razor给了我这个无意义的错误:

The name 'model' does not exist in the current context.

使字面意义为零的部分是这导致了错误:

@model ICollection<DataSourceByActive>

我知道@model是适当的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必须改变。




在我的情况下,问题是,将项目从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%)。




您必须重新启动Visual Studio以使这些答案中的任何更改生效!

我觉得这需要一些曝光,因为你尝试了很多变化,并且可能找到了正确的组合,但是除非你真的试图重新启动,否则永远不会知道,并且很可能错过修复。




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




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

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

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




更改视图文件夹的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" />



为了解决这个问题,我确保使用NuGet和Package Manager Console升级到最新的MVC版本。

安装程序包Microsoft.AspNet.Mvc - 版本5.2.4

然后升级到最新的Razor版本

安装程序包Microsoft.AspNet.Razor - 版本3.2.4

然后我更改了所有web.config文件以反映更改。 你会看到下面的内容:

在主web.config文件中,确保网页:版本正确。 这是它可以找到的地方(忽略其他键):

<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也应该显示“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.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部分

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



Links