ASP.NET MVC3 Razor - потерял intellisense при размещении представления в другом месте? - PullRequest
7 голосов
/ 06 февраля 2011

VS2010 Ultimate, ASP.NET MVC 3 с бритвой.

В моем приложении MVC3 я создал собственный движок просмотра, который позволяет использовать вложенные области, например

~/areas/admin
    /marketing
        /views
            index       
        /controllers
            marketingController
        /email
            /views
                index
                ...
            /controllers
                emailController
        /templates
            /views
                index
                edit
                ...                  
            /controllers
                templatesControler

и т.д.

Все это прекрасно работает, за исключением того, что я, кажется, потерял intellisense в представлениях, которые не находятся в стандартном ~/areas/area_name/views/myview.cshtml местоположении.

Есть предложения?

Обновление

Только что, я добавил заявление @inherits

@inherits System.Web.Mvc.WebViewPage<Namespace.Models.Class>

и intellisense начал работать. Затем я удалил оператор, и он продолжает работать.

Есть ли какая-либо настройка в файле проекта или что-то, что сообщает Visual Studio, какой тип intellisense следует применять к открытому файлу, кроме расширения файла? (Если бы использовалось расширение, я бы ожидал, что оно будет намного более последовательным).

Обновление 2

Хотя добавление файла web.config в каждую из папок моего вида довольно хорошо решает проблему, размещение конфигурации бритвы в корневом каталоге web.config - нет.

После добавления необходимого раздела system.web.webPages.razor в ~/web.config,

  1. Я добавляю файл Razor .cshtml в одну из моих вложенных папок.
  2. Intellisense работает.
  3. Я переименовываю файл (сохраняя расширение .cshtml)
  4. Интеллектуальная подсветка и подсветка синтаксиса перестают работать.
  5. Я закрываю переименованный файл и снова открываю его - все снова начинает работать.
  6. Или вместо закрытия и повторного открытия файла я переименовываю его обратно в исходное имя, он снова начинает работать.

Это похоже на ошибку VS - переименование файла (но с сохранением правильного расширения) не должно, насколько я могу судить, вызывать такого рода поведение. Я продолжу помещать отдельные web.config с в каждую из папок моего представления, поскольку это исправляет проблему, но раздражает необходимость загромождать решение, когда я ожидаю, что эти параметры будут распространяться через дерево решений, как и другие web.config настройки делают.

Стоит также отметить, что независимо от того, где находится конфигурация Razor, сайт продолжает работать правильно, независимо от того, работает intellesense или нет.

решаемые

Powers That Be сообщили мне (невероятно быстро), что это известная проблема, которая исправлена ​​в MVC3 RTM и VS2010 SP1. Проблема исчезла после обновления моей установки MVC3 и добавления SP1.

1 Ответ

7 голосов
/ 06 февраля 2011

Папка Views содержит файл Web.config, который задает параметры по умолчанию для представлений Razor , включая базовый тип по умолчанию и пространства имен, а также настраиваемый хост, который включает директиву @model.

Представления Razor в другой папке не наследуют эту конфигурацию.
Вам необходимо добавить эту конфигурацию в Web.config в вашей папке:

<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>
...