ASP.NET MVC3 Razor-потерянный intellisense при размещении вида в альтернативном месте?


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

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

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

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

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

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

Решено

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

1 7

1 ответ:

Папка Views содержит Web.конфигурационный файл, который задает параметры по умолчанию для представлений 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>