【问题标题】:"The name 'HTML' does not exist in the current context" in MVC 3 ViewsMVC 3视图中的“当前上下文中不存在名称'HTML'”
【发布时间】:2011-09-26 18:38:29
【问题描述】:

我开始使用“MVC 3”,但遇到了一些小问题。在我的观点中,当我编写这样的代码时:

@if(Request.IsAuthenticated) {
    <text>Welcome <b>@Context.User.Identity.Name</b>!
    [ @Html.ActionLink("Log Off", "LogOff", "Account") ]</text>
}
else {
    @:[ @Html.ActionLink("Log On", "LogOn", "Account") ]
}

@Request 和 @Html 等对象表示错误:The name 'HTML' does not exist in the current context

@Context、@ViewBag、@Layout、@Url 等也会出现同样的情况。

见:

但代码已正确编译,没有错误。问题是我不能在视图中将 Intellisense 与这些对象一起使用。正常吗? (我不这么认为)。会发生什么?

我已经重新安装了 MVC 3 框架,但仍然出现同样的情况。

注意:这是一个从头开始的新项目,而不是 MVC 2 迁移。 Razor 引擎和 ASPX 都会出现这种情况。

这是 Views 文件夹中的 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=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" />
      </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>

    <!--
        Enabling request validation in view pages would cause validation to occur
        after the input has already been processed by the controller. By default
        MVC performs request validation before a controller processes the input.
        To change this behavior apply the ValidateInputAttribute to a
        controller or action.
    -->
    <pages
        validateRequest="false"
        pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <controls>
        <add assembly="System.Web.Mvc, Version=3.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>

谢谢!

【问题讨论】:

  • 你试过这个解决方案了吗? stackoverflow.com/questions/2326312/…
  • 感谢您的回答。我已经看过这个帖子了。我认为这不适用于我。我没有编译错误,并且该项目不是以前的 MVC 框架迁移。
  • 哦,我明白了。对于那个很抱歉。就我个人而言,我没有遇到过这个问题,所以除了重新安装 Visual Studio 之外,我想不出任何其他尝试。
  • 我遇到了同样的问题。编译工作正常,但这个问题从 Visual Studio 中带走了 Intellisense。发生在 2010 年和 2012 年,并且都发生在 MVC3 和 MVC4 中。
  • 我正在使用带有 MVC5 的 Visual Studio 2013,重新启动 Visual Studio,然后清理和构建我的项目解决了这个问题。重新启动它会恢复 Razor 智能感知,并且清理它会导致我的所有 Razor 调用出现操作错误,直到我构建了解决方案和项目。

标签: asp.net asp.net-mvc asp.net-mvc-3


【解决方案1】:

你可以试试:

  1. 关闭带有错误错误的View

  2. 关闭Visual Studio

  3. 重新打开同一个项目

  4. 打开一个不同的View 然后是导致错误的那个

  5. 关闭那个View,希望你没有在这个View中看到任何类似的错误

  6. 重新打开之前给您带来问题的View

【讨论】:

  • 我在这里遇到了与其他人类似的问题,奇怪的是,仅在项目中打开其他视图就解决了问题。该过程并不像这里描述的那样复杂。
  • 有点傻,我居然花了5分钟解决这样的问题,解决办法就是关闭视图,打开另一个视图,然后打开刚才引起问题的视图,错误都消失了。我什至没有关闭视觉工作室。
  • 听起来有点像VODO仪式,只是少了一只黑公鸡的牺牲
  • 这对我有用,我使用 resharper 进行了重构,这打开了很多文件。我刚刚关闭了所有文件,错误就消失了。 (VS2015)
  • 为什么这仍然是一个错误,8年后在VS 2019(16.6.2)?至少解决方案可以归结为“您是否尝试过关闭再打开?”
【解决方案2】:

我已经用旧的、好的、明智的微软默认解决方案解决了这个问题:重新安装所有东西。

卸载并重新安装 Visual Studio 2010 和 MVC 3 框架。

【讨论】:

    【解决方案3】:

    清理您的解决方案并在引用下。 然后设置以下属性:

    System.Web.MVC file to Copy Local = True.
    

    【讨论】:

      【解决方案4】:

      我所要做的就是关闭编辑器中打开的所有视图并重建。

      【讨论】:

        【解决方案5】:

        对我有用的是关闭 Visual Studio,删除用户选项文件(解决方案和项目级别),然后重新启动 Visual Studio。

        【讨论】:

          【解决方案6】:

          我正在使用 dotnet core sdk 2.2 和 Visual Studio Professional 2019。

          这是由 Visual Studio 修改代码引起的。

          代码已粘贴到剃刀视图中。 Visual Studio 会尝试但无法自动格式化它。部分失败导致删除代码。

          按 ctrl+z 可恢复格式,但保留粘贴的代码。然后修复了剃刀编译错误(The name 'Html' does not exist in the current context

          在工具 -> 选项 -> 文本编辑器 -> HTML -> 高级下禁用粘贴格式(参见 https://stackoverflow.com/a/28053865/1462295

          【讨论】:

            【解决方案7】:

            对我来说,这似乎是因为我收到了编译器警告。代码仍然可以编译和运行,但直到我修复了所有构建警告,我的 Intellisense 才开始工作。

            【讨论】:

              【解决方案8】:

              我尝试从解决方案中删除仍然有问题的项目,然后重新添加它,之后问题就消失了。

              【讨论】:

                【解决方案9】:

                设置System.Web.MVC的属性,Copy Local = True

                【讨论】:

                  【解决方案10】:

                  在我的情况下,我的 Packages 文件夹丢失了,包括 MVC 和 Razor,因此我更新了 packages.config 中的包,重新打开了视图并且它工作了。

                  【讨论】:

                    【解决方案11】:

                    您可以尝试以下几点:

                    • 关闭带有错误错误的View
                    • 关闭视觉工作室。
                    • 再次打开项目。
                    • 清理您的解决方案
                    • 重建您的解决方案。

                    希望您现在不会遇到任何类似的错误。

                    如果你仍然有同样的问题。比请检查以下步骤。

                    • 确保视图文件夹中有web.config 文件。因为MVC 有两个web.config。一个用于解决方案,另一个用于项目。

                    您的web.config 文件看起来像这样,位于views 文件夹中。

                    <?xml version="1.0"?>
                    
                    <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>
                    
                      <system.web.webPages.razor>
                        <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.7.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.Optimization"/>
                            <add namespace="System.Web.Routing" />
                            <add namespace="Your Project Name" />
                          </namespaces>
                        </pages>
                      </system.web.webPages.razor>
                    
                      <appSettings>
                        <add key="webpages:Enabled" value="false" />
                      </appSettings>
                    
                      <system.webServer>
                        <handlers>
                          <remove name="BlockViewHandler"/>
                          <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
                        </handlers>
                      </system.webServer>
                    
                      <system.web>
                        <compilation>
                          <assemblies>
                            <add assembly="System.Web.Mvc, Version=5.2.7.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
                          </assemblies>
                        </compilation>
                      </system.web>
                    </configuration>
                    

                    它对我有用。也希望你。

                    【讨论】:

                      【解决方案12】:

                      关闭 Visual Studio => 删除项目中的 obj 和 bin 文件夹 => 启动 Visual Studio

                      【讨论】:

                      • 在尝试了其他所有方法,弄乱了 nuget 等之后 - 这个答案对我来说实际上是有效的(在我的情况下是 mvc4)
                      【解决方案13】:
                      <entityFramework>
                      <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
                        <parameters>
                          <parameter value="v11.0" />
                        </parameters>
                      </defaultConnectionFactory>
                      

                      web.config 中这个问题的解决方案

                      【讨论】:

                        【解决方案14】:

                        在从我的包列表中卸载 EntityFramework 之后,我在 ASP.NET MVC 4 上也遇到过这种情况。

                        我不得不删除这个部分

                        &lt;section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.4.0.0, ....

                        保留在 Web.config 文件中...至少它从错误列表中删除了错误

                        【讨论】:

                          【解决方案15】:

                          为死灵帖子道歉。

                          在 Visual Studio 2015 中选择“构建 | 重建解决方案”为我解决了这个问题。就我而言,在重命名项目的主命名空间后出现警告。重建让一切都变得顺理成章。

                          【讨论】:

                            【解决方案16】:

                            我正在使用 ASP .net 核心。通过将Microsoft.AspNetCore.Mvc1.1.2 升级到1.1.3 解决了我的问题。

                            【讨论】:

                              【解决方案17】:

                              对我来说,我刚刚重新启动了我的 Visual Studio,一切都得到了修复。

                              【讨论】:

                              • 这没有提供问题的答案。一旦你有足够的reputation,你就可以在任何帖子上comment。还要检查这个what can I do instead
                              • @thewaywewere 实际上,我不同意。他的回答是重新启动 Visual Studio。有时 VS 确实有这样的错误可以通过这种方式解决。这是其中一种情况,具体取决于您是否说针对不同的 MVC 版本,例如 OP,因为如果您使用以前的版本运行它、升级它并且它不采用新设置,它会缓存。跨度>
                              【解决方案18】:

                              也许我回答这个问题有点晚了,但这个简单的解决方法帮助了我:

                              右键单击文件> 从项目中排除。 右键单击文件 > 包含在项目中。

                              【讨论】:

                                【解决方案19】:

                                您需要做的就是重新启动 Visual Studio 并检查。

                                【讨论】:

                                  【解决方案20】:

                                  我在 MVC 4 中遇到了同样的问题。这些解决方案都不适合我。相反,在 Windows 中,我进入了控制面板 -> 卸载程序。在程序列表中选择 Microsoft ASP.NET MVC 4。点击“卸载”。将显示“Microsoft ASP.NET MVC 4 安装”向导。点击“修复”。

                                  【讨论】:

                                    猜你喜欢
                                    • 1970-01-01
                                    • 2011-05-23
                                    • 1970-01-01
                                    • 1970-01-01
                                    • 2018-12-04
                                    • 2023-03-09
                                    • 1970-01-01
                                    • 1970-01-01
                                    • 1970-01-01
                                    相关资源
                                    最近更新 更多