【问题标题】:MVC 3 error in VS2017: The name 'ViewData' does not exist in the current contextVS2017 中的 MVC 3 错误:当前上下文中不存在名称“ViewData”
【发布时间】:2018-12-04 03:35:14
【问题描述】:

也许这是一个 Intellisense 问题,因为它只出现在 .cshtml 文件中,并且代码可以正常编译/执行。我不确定。

我最近从 VS2010 迁移到 VS2017,我正在尝试使用 MVC3 项目。一切运行良好,但我收到多个与 MVC 语法相关的 Intellisense 错误。例如在视图 > 共享 > _Layout.cshtml:

<title>@ViewData["Title"]</title>

给出错误:

The name 'ViewData' does not exist in the current context

这是由 Views > Home > Index.cshtml 设置的:

    @{
        ViewData.Title = "Dashboard"; // intellisense error also shows here
    }

尝试使用@Html.Partial 时也会出现这种情况:

'HtmlHelper' does not contain a definition for 'Partial' and no extension method 'Partial' accepting a first argument of type 'HtmlHelper' could be found (are you missing a using directive or an assembly reference?)

我不确定我的 dll 引用或网络配置是否存在某种问题。我已验证存在以下 dll 引用:

System.Web.Mvc - Version 3.0.0.0
System.Web.Razor - Version 2.0.0.0
System.Web.WebPages - Version 1.0.0.0
System.Web.WebPages.Razor - Version 1.0.0.0

在我的 Views/web.config 文件中:

  <configSections>
    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
      <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=1.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=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" />
        <add namespace="System.Web.Optimization" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>

还有我的根 web.config 文件:

<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=1.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=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  </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>

<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
  </dependentAssembly>
</assemblyBinding>

【问题讨论】:

  • 您在使用母版页吗?
  • @Rahul 我没有使用母版页。

标签: c# asp.net-mvc visual-studio asp.net-mvc-3 razor


【解决方案1】:

最终使用了here 提出的解决方案(即使它是 VS2013):

MS 表示,对于 VS2013,“用于 Razor(CSHTML 和 VBHTML)文件的智能感知仅限于 HTML 标记。”

但是,如果您在每个 .cshtml 中添加这两行,则智能感知将再次适用于 VS2013 中的 MVC3:

@using System.Web.Mvc.Html

@inherits System.Web.Mvc.WebViewPage&lt;dynamic&gt;

您可以输入模型的类型,而不是动态。

【讨论】:

    【解决方案2】:

    虽然我不确定它为什么会这样,但您应该考虑使用ViewBag 代替ViewData 的动态包装器。

    ViewBag.Title = "Dashboard"; // in your action method
    

    在你的代码中

    @ViewBag.Title
    

    【讨论】:

      【解决方案3】:

      我最近从 VS2017 迁移到 VS2019。我收到以下错误: "当前不存在名称'ViewData'"

      我重新运行了 Visual Studio 启动器并单击修改。 那么问题就解决了!

      希望这个回答对你有帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-09
        • 1970-01-01
        • 1970-01-01
        • 2011-09-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多