«Имя« HTML »не существует в текущем контексте» в MVC 3 Views - PullRequest
27 голосов
/ 01 июля 2011

Я начинаю использовать «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 и другими.

См .:

изображение http://i56.tinypic.com/28s1smp.jpg

Но код правильно скомпилирован без ошибок. Проблема в том, что я не могу использовать Intellisense с этими объектами в представлениях. Это нормально? (Я так не думаю). Что может происходить?

Я переустановил среду MVC 3, но то же самое происходит.

Примечание: это новый проект с нуля, а не миграция MVC 2. Это происходит как с движком Razor, так и с ASPX.

Это 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=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>

Спасибо!

Ответы [ 16 ]

19 голосов
/ 05 марта 2013

Вы можете попробовать:

  1. Закрыть View с ложными ошибками.

  2. Закрыть Visual Studio

  3. Повторно открыть тот же проект

  4. Откройте другой View, чем тот, который вызывает ошибки

  5. Закройте это View, надеюсь, вы не видели подобных ошибок в этом View

  6. Снова откройте View, который доставил вам проблемы раньше

8 голосов
/ 22 октября 2014

Очистите ваше решение и по ссылкам.Затем установите следующее свойство:

System.Web.MVC file to Copy Local = True.
8 голосов
/ 01 июля 2011

Я решил эту проблему с помощью старого, хорошего, мудрого решения Microsoft по умолчанию: переустановите все заново.

Удалите и переустановите Visual Studio 2010 и MVC 3 Framework.

5 голосов
/ 15 сентября 2017

Все, что мне нужно было сделать, это закрыть все представления, которые были открыты в редакторе, и перестроить.

1 голос
/ 05 мая 2015

Для меня работало закрытие Visual Studio, удаление файлов опций пользователя (как на уровне решения, так и на уровне проекта), а затем повторный запуск Visual Studio.

1 голос
/ 09 декабря 2012

Для меня это только казалось, что у меня были предупреждения компилятора. Код по-прежнему будет компилироваться и работать нормально, но только когда я исправил все предупреждения о сборке, мой Intellisense начал работать.

0 голосов
/ 13 июня 2018

Возможно, я немного опоздал, чтобы ответить на этот вопрос, но это простое исправление помогло мне:

Щелкните правой кнопкой мыши файл> Исключить из проекта. Щелкните правой кнопкой мыши файл> Включить в проект.

0 голосов
/ 03 июня 2017

Для меня я просто перезапустил свои Visual Studio, и все было исправлено.

0 голосов
/ 30 мая 2017

Я использую ядро ​​ASP .net. Решил мину, улучшив Microsoft.AspNetCore.Mvc с 1.1.2 до 1.1.3.

0 голосов
/ 24 февраля 2017

В моем случае папка Packages отсутствовала, включая MVC и Razor, поэтому я обновил пакеты в package.config, снова открыл представление, и оно заработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...