ChatGPT解决这个技术问题 Extra ChatGPT

Razor View 抛出“当前上下文中不存在名称‘模型’”

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

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

这是有问题的代码行:

@model ICollection<DataSourceByActive>

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

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

关键是“在当前情况下”。某处括号没有打开或关闭......所以你的陈述不在你认为的上下文中。
您可以添加您的控制器代码以及您正在尝试做的一些示例标记吗?
在编辑 Razor 视图时,此错误也可能出现在 Visual Studio IDE 中,错误代码为 cs0103。

a
ataravati

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

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

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


请记住,如果您的 MVC 项目中有区域,它们也都有 Views\web.config 文件!
奇怪的是,views 目录中的 web.config 很好,但是项目的 web.config 的网页版本是 2.0.0。当我把它做成 3.0.0 时,错误检测就消失了。
This will fix your problem. 它没有。
@AnirudhaGupta 问题中的那个。
首先尝试 eaglei22's answer。在尝试其他解决方案(例如重新启动等)之前,请确保使用“@Model”而不是“@model”引用您的模型。
D
Doppelganger

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

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

对于 MVC5 使用:

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

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


谢谢!对于 MVC5,版本号需要为 3.0.0.0。 (而且它只存在于 main Web.config 文件中。)
这是我要说的正确答案,因为我到处都尝试更改版本,但最后这是阻止剃须刀智能工作的唯一原因。
这对我有用。进行此更改后,我必须重新启动 Visual Studio 才能正常工作。
我在使用 MVC 5 时遇到了这个问题,问题是密钥存在但针对的是版本 2.0.0.0 而不是 3.0.0.0。改变它解决了这个问题。谢谢!
我使用了它并且它有效,但我只将它添加到视图 web.config 中。 Intellisense 在 VS 重新启动后立即出现。
M
Mark Schultheiss

这是我所做的:

关闭 Visual Studio 删除 SUO 文件 重启 Visual Studio

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


是的,ASP.NET Core 应用程序没有 web.config 文件,所以这对我有用(还添加了一些扩展以改进智能感知)。
我什至不必删除 SUO 文件。我刚刚关闭并打开了 Visual Studio。
Visual Studio 2019:没有 suo 文件,删除 .vs 文件夹有帮助。
谢谢..这为我做了。 .net Core 2.0 mvc 应用程序
Visual Studio 2019 在这里,关闭并重新打开为我修复了它。谢谢。
T
Tarek Shawadfy

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

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

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


如果您从 asp.net 版本 4.0.0 升级到 4.5.1,就会发生这种情况。就我而言,我的主要 web.config 显示网页:Version = 2.0.0.0 但它应该是 3.0.0.0。更新这个值解决了这个问题。
v
vinayak hegde

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

这也对我有用。我已经升级了 razor 以支持 C#6,而且 MVC 也必须更新。检查您的 System.Web.Mvc 程序集参考以确认您需要的主要版本。
我有同样的问题。将 web.config 中的所有 MVC、Razor 等程序集修复为 x.0.0.0 让事情再次为我工作
@JamesWilkins 很好,为我工作。只是一件事,之后删除您的项目 .suo 文件并重新启动VS。
接得好!从 .net framework 4.0 升级到 4.6 后,我遇到了这个问题,显然指向了错误的程序集版本。
S
Stephan Møller

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

脚步:

打开 Visual Studio 安装程序(在 windows 中搜索 Visual Studio 安装程序)

单击单个组件

在搜索框中输入“mvc”

检查 mvc4-box

点击右下角的“修改”

注意:Visual Studio 需要关闭

https://i.stack.imgur.com/AUK2Q.png


这就是我们仍然在 MVC 4 中所得到的
这解决了我在 VS2022 中的问题。谢谢你。
这也解决了我在 VS2022 中的问题。谢谢你。
我整天都在尝试各种解决方案,最后你解决了我的问题。谢谢你
e
eaglei22

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

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


我希望我不再忘记这一点!谢谢你提醒我!
我必须查找这个问题的次数令人沮丧。但我很高兴这是一个简单的修复!
J
Justin Skiles

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


如果您从 MVC 4 升级到 MVC 5,这就是要检查的答案。它准确地指出了版本问题,解决了我的问题,并且几乎没有破坏任何东西的风险。
d
ddagsan

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


P
Prach

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

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


a
asontu

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

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


感谢您的建议,无论出于何种原因,这也对我有用
也为我工作。
这是在我的情况下唯一有效的选择。我将一个 vs2010 项目切换到 2019 年,并且工作起来非常有魅力。保存csproj后,我尝试像原始文件一样取消注释标签,它仍在工作......
c
chemark

出于某种原因,我的 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>

s
speciesUnknown

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

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

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

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

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

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


我在已发布的视图文件夹中错过了我的 webconfig .. 不知道如何保留它
@RicardoSaracino .csproj 文件有一个要包含在构建中的文件列表。
M
Mihai Caracostea

就我而言,问题是在将项目从 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%)。


B
Big Gunz

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

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


h
hossein andarkhora

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


B
Brett Wertz

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

安装包 Microsoft.AspNet.Mvc -Version 5.2.4

然后升级到最新的 Razor 版本

安装包 Microsoft.AspNet.Razor -Version 3.2.4

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

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

<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 也应该显示“新版本”,看看它在哪里显示 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 部分中,确保 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>

S
Svein Terje Gaup

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


M
Moslem Hady

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


M
Martin Connell

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

... System.Web.Mvc,Version=xxxx ...(在各个地方〜\Views\web.config)... System.Web.WebPages.Razor,Version=xxxx ...(在各个地方〜\ Views\web.config) (in ~\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 设置似乎是可选的。至少在当前问题的背景下,删除它似乎没有负面影响。


S
Steef

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


u
user12345

已经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 中。

我解决了我的问题


S
Sebastian Castaldi

就我而言,我在 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>
    }

这个很重要;不知道你为什么被否决。
因为它与原始问题无关。
U
Undo

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


a
agorshkov23

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