【问题标题】:The name 'model' does not exist in current context in MVC3MVC3 的当前上下文中不存在名称“模型”
【发布时间】:2011-09-17 08:36:28
【问题描述】:

我在一个项目中添加了一个 cshtml 页面。当我尝试向其中添加以下声明时,出现错误:“当前上下文中不存在名称‘模型’”。

@model xyz.abc.SomeClass

我检查了参考资料,所有参考资料都已到位。我在视图文件夹中添加了一个 web.config,但这并没有解决它。

我有什么遗漏吗?

【问题讨论】:

  • 如果您正在寻找 MVC4 解决方案,Adam 的回答是有效的,您需要从您的主 web.config 中找到正确的版本号并在此处使用相同的版本号。 MVC4 视图文件夹 web.config 缺少 行并从根 web.config 复制一个(它可能具有不同的其他值,因此请检查您的值)并将其放入视图中。然后我们关闭了项目并在 Visual Studio 中重新加载它,它成功了。

标签: asp.net-mvc-3 razor


【解决方案1】:

更新:如果您使用的是较新版本的 MVC,则适用相同的过程,只需确保在 web.config 的 <host> 行中使用正确的版本号。

嗯,我发现自己遇到了同样的事情,经过进一步研究,我发现了问题所在!

您需要为 Views 文件夹包含默认的 MVC3 web.config。 MVC3 有两个:一个在您的应用程序的根目录中,一个在视图文件夹中。这有一个包含命名空间的部分。确保你的看起来像这样:

  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.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>

我建议您创建一个新的 MVC3 项目,然后将为您创建的 web.config 复制到您的视图文件夹中。

重要提示完成此操作后,您需要关闭文件并重新打开它。瞧!智能感知!

【讨论】:

  • 我不能将此标记为答案,但这也是我的问题。忘记将这些部分添加到 web.config。
  • 是的,希望我能将您的答案标记为答案。我被困了一段时间(在我第一次尝试转换为 Razor 失败后放弃了),这一直是问题。谢谢!
  • 对我不起作用。或者,至少,有时我得到智能感知,有时却没有,即使我在 Views 文件夹的 web.config 中设置了所有这些。
  • 非常感谢!它保护了我的一天!
  • 确保在您的MAIN web.config 文件&lt;add key="webpages:Version" value="3.0.0.0" /&gt; 中更新到最新版本(此处为MVC 5)
【解决方案2】:

当我创建一个新区域来组织我的页面时,我遇到了同样的问题。我的结构看起来像:

网络项目

- [] Areas
    - [] NewArea
        - [] Controllers
        - [] Views
- [] Controllers
- [] Views
    - Web.config
- Web.config

在 WebProject 下的 Views 文件夹中创建的视图工作正常,但在 NewArea 下创建的视图抛出以下错误:

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

为了解决这个问题,我将 WebProject 下 Views 文件夹中的 web.config 复制到 NewArea 中的 Views 文件夹中。见下文。

网络项目

- [] Areas
    - [] NewArea
        - [] Controllers
        - [] Views
            - **Web.config**
- [] Controllers
- [] Views
    - Web.config
- Web.config

我遇到了这个问题,因为我使用 Add -> New Folder 手动创建了这个新区域来添加文件夹。我应该右键单击项目并选择添加 -> 区域。然后 Visual Studio 会负责正确设置该区域。

【讨论】:

  • +1 ...我只是注意到由于某种原因没有包含 web.config,很高兴我找到了您的答案来解决我的问题
  • 我意识到这是旧的,但我今天实际上遇到了同样的问题,所以我想对这个答案表示感谢。 :)
  • 我也有同样的问题,类似的解决方案。我的Views/Web.config 引用了System.Web.Mvc.MvcWebRazorHostFactory 5.0.0.0 版,我有一个引用v4.0 的第三方区域并与视图合作。我将Views/Web.config 设置回 v4.0,一切正常。
  • 特别是您关于用 Views 文件夹中的一个覆盖 web.config 的评论帮助我解决了这个问题。由于某些疯狂的原因,简单地使内容完全相同是行不通的。啊啊啊啊啊! ;)
  • 就我而言,我使用 robocopy 将本地版本与服务器版本同步,排除所有 web.config 文件。服务器版本没有web.config文件,会出现这个错误。
【解决方案3】:

如果您的视图位于类库程序集中,这对于在项目之间重用共享视图很有用,那么仅执行 Adam 建议的操作可能还不够。即便如此,我仍然有问题。

在项目根目录的 web.config 中试试这个:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <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>
  </configSections>
  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <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.webPages.razor>
  <appSettings>
    <add key="webpages:Version" value="2.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 debug="true" targetFramework="4.0">
      <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=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
      </assemblies>
    </compilation>
    <pages>
      <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.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true" />
    <handlers>
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer>
</configuration>

这在您的意见文件夹中的 web.config 中:

<?xml version="1.0"?>

<configuration>
  <configSections>
    <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>
  </configSections>

  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.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>

  <appSettings>
    <add key="webpages:Enabled" value="false" />
  </appSettings>

  <system.web>
    <httpHandlers>
      <add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
    </httpHandlers>
    <pages
        validateRequest="false"
        pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <controls>
        <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
      </controls>
    </pages>
  </system.web>

  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />

    <handlers>
      <remove name="BlockViewHandler"/>
      <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
    </handlers>
  </system.webServer>
</configuration>

这对我有用。现在,我在非 MVC 项目中的视图上有智能感知并且没有编译错误,然后我可以从多个 MVC 网站引用。

【讨论】:

  • 这是针对您的 Web 项目中的 web.config 文件,还是针对您的类库中的 web.config 文件?
【解决方案4】:

当我无意中在根目录中有路径 /about 的视图文件 (About.cshtml) 的副本时,我遇到了这个问题。 (不是视图文件夹)一旦我将文件移出根目录,问题就消失了。

【讨论】:

  • 谢谢!我刚刚被同样的问题发疯了,这就是答案;-)
  • 酷!我记得我也发疯了。 :)
  • 我在根目录的文件夹中有一些 .cshtml 文件,这导致我的视​​图中只有文件夹失败... while(true) { bashHeadToWall; }。谢谢。
【解决方案5】:

使用 VS2012 和 VS2013 时遇到类似问题。
将以下行添加到主 web.config 中的 工作:

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

如果该行已经存在但显示为 2.0.0.0,则将其更改为 3.0.0.0 有效。

【讨论】:

  • 这也是我在执行 MVC 升级后的问题。说是2.0.0.0,改成3后就可以了。
【解决方案6】:

更新:2015 年 5 月 5 日 对于您的 MVC 5 项目,您需要在 /views/web.config 中将版本设置为 5.0.0.0

<system.web.webPages.razor>
     <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</system.web.webPages.razor>

【讨论】:

  • 是的,找到导致问题的版本 5.2.0.0,但将其更改为 5.0.0.0 修复了它!!!谢谢。
【解决方案7】:

当您使用如下代码在视图顶部声明模型时:

@model MyModel

您需要在下面将您对它的引用大写,例如:

@Html.Encode(Model.MyDisplayValue)

我认为 Views 文件夹中缺少 web.config 是造成此问题的主要原因,但如果问题已解决且问题仍然存在,请检查您使用的是 Model,而不是 >model 在源代码中引用它。

【讨论】:

  • 当问题是您试图在视图中的自己的代码中引用您的模型时,这解决了错误,例如当您创建自己的不依赖于 lambda 表达式的助手时等。
【解决方案8】:

我也遇到了这个问题。我的情况有点不同。

  1. 我的一个视图文件夹被意外移动到我项目的根目录。这导致路线 project_root/SignUp/ViewNameproject_root/Views/SignUp/ViewName 之前匹配。这导致了@model 错误。

  2. 将视图移回适当的位置后,以某种方式在项目根目录中重新创建了该目录。这一次,空荡荡的。 /SignUp/ViewName 工作,但 /SignUp/ 抛出了 403 - Forbidden: Access is denied. 错误。 整个文件夹必须从项目根目录中删除。

我希望这对某人有所帮助。我花了好几个小时相信这个问题是由我们最近从 MVC 3 升级到 MVC 4 引起的。请注意:升级问题应该只发生在 MVC 2 和 MVC 3 之间。如果你在以后的版本中看到这个问题,它可能不是由于升级。

【讨论】:

    【解决方案9】:

    我花了很长时间才解决这个问题,但最后我希望我已经在 MVC 上解决了,类似:

    我已重新安装 ASP.NET 4.5 (http://www.asp.net/downloads)

    我已按照http://www.asp.net/whitepapers/mvc4-release-notes上的升级教程进行操作

    但是这句话对我来说是错误的

    System.Web.Mvc, Version=4.0.0.0
    System.Web.WebPages, Version=2.0.0.0
    System.Web.Helpers, Version=2.0.0.0
    System.Web.WebPages.Razor, Version=2.0.0.0
    

    因为我在 System.Web.Razor 中有 Razor,所以我将 razor 命名空间更改为 System.Web.Razor。

    将此添加到您的 web.config

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

    我已将程序集引用添加到上面所有这些程序集

    找到 ProjectTypeGuids 元素并将 {E53F8FEA-EAE0-44A6-8774-FFD645390401} 替换为 {E3E379DF-F4C6-4180-9B81-6769533ABE47}。

    就是这样。

    【讨论】:

    • appsettings 添加到 webconfig 为我解决了这个问题。虽然我认为&lt;add key="webpages:Version" value="2.0.0.0" /&gt; 是驱动因素,但不需要其他设置。
    • 对于 MVC 5,这需要是 3.0.0.0 但是是的,这非常重要!
    【解决方案10】:

    这是一个可怕的错误,但是:

    确保您在 RemoteView 中有 Web.config 文件。也许您跳过了通过您的 Ftp 程序的过滤器上传它。

    【讨论】:

      【解决方案11】:

      我在 Areas/MyArea/Views/web.config 下缺少 web.config。一旦添加它工作正常。这是使用 MVC 5 和 .NET4.5

      【讨论】:

      【解决方案12】:

      还有另一个原因。就我而言,我已将 index.cshtml 文件复制到 Web 根文件夹(在 Views 文件夹之外)作为远程服务器的备份。

      所以,我不断更改我的 /views/web.config,不断更改我的 /views/home/index.cshtml 并且错误不断发生......直到发现视图文件夹之外的 /index.cshtml,将其删除并当然,一切都恢复正常了!

      【讨论】:

        【解决方案13】:

        我遇到了同样的问题,但就我而言,唯一改变的是我卸载了 Visual Studio 2012 并安装了 Visual Studio 2013。我打开了我们的解决方案,但我一直得到相同的 The name 'model' does not exist in current context每个 Razor 视图中的错误。

        我的同事建议检查 VS2013 的更新。安装 VS2013 Update 1 后,我不再收到此错误。

        【讨论】:

        • VS2013 更新 2 出现此错误。使用更新 1,它工作正常。还没有找到解决办法。我试图卸载 Update 2,但在打开 cshtml 文件后导致 VS 崩溃。
        • VS2013 Update 2 也有同样的问题。
        【解决方案14】:

        检查视图目录中的配置文件。在里面 添加 MVC 4/5 的密钥

        【讨论】:

          【解决方案15】:

          重新安装 nuget 为我解决了这个问题

          PM> 安装包 Microsoft.AspNet.Razor -Version 3.2.3

          【讨论】:

            【解决方案16】:

            对我来说,这就是问题所在。该部分缺少整个块。

              <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=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
                <add assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
                <add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
              </assemblies>
            

            【讨论】:

              【解决方案17】:

              更新软件包后我遇到了同样的问题。我做了你在这个主题上面写的所有东西,但是模型关键字的红色底层并没有消失。后来,找到了解决方案:只需从我的项目目录中删除'package'文件夹并重建,同时允许 NuGet 恢复丢失的包。刷新,完成!

              【讨论】:

                【解决方案18】:

                检查您的 web.config 文件是否存在于已发布的文件中

                【讨论】:

                  【解决方案19】:

                  我遇到了同样的问题,然后我找到了解决方案。解决办法是:

                  1. 关闭 Visual Studio
                  2. 删除 SUO 文件
                  3. 重启 Visual Studio

                  .suo 文件是一个隐藏文件,位于 .svn 解决方案文件所在的同一文件夹中。希望,它会工作!

                  【讨论】:

                    【解决方案20】:

                    关闭 Visual Studio 并重新打开对我有用。一定是个奇怪的bug。

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 2021-01-02
                      • 2016-09-30
                      • 2014-03-30
                      • 2017-01-19
                      • 2015-01-29
                      • 1970-01-01
                      相关资源
                      最近更新 更多