Почему Razor не видит ViewBag, Url.Content и т.д., Когда страница макета находится вне ~/Views/Shared?

Я работаю над фреймворком CSS, который я могу включить в другие проекты в виде пакета NuGet.

Чтобы все было в чистоте, вся структура - виды, стили, изображения и главные страницы/страницы макета - фактически хранится в ~/CssThing/

отлично работает с движком просмотра WebForms, но когда я перемещаю файл _layout.cshtml в ~/CssThing/, а затем изменяю страницу Razor, чтобы сказать:

@{
Layout = "~/CssThing/_layout.cshtml";
}

он начинает жаловаться, что ViewBag не определен, или что The name 'Url' does not exist in the current context, или различные другие биты странности, которые предполагают, что представление больше не наследуется от соответствующего базового класса.

Как я могу заставить это работать?

ПРИМЕЧАНИЕ. Причина, по которой все расщепляется, заключается в том, что нет способа заставить NuGet перезаписать существующий код, и нет никакого способа развернуть пустое веб-приложение MVC3, не забирая все ссылки jQuery и т.д., а не рискуйте, чтобы моя инфраструктура была полуразвернута, потому что половина файлов уже присутствовала, я держу все полностью отдельно.

Ответ 1

Проверьте, что у вас есть web.config в каталоге новых представлений. Лучше всего скопировать файл, созданный по умолчанию в Views. Этот web.config определяет параметры Razor, такие как базовый класс по умолчанию и какие пространства имен неявно доступны. Эти пространства имен определяют, какие HTML-помощники вы можете использовать.

Ответ 2

Вам нужно вручную указать @inherits WebViewPage или добавить раздел по умолчанию Web.config (который устанавливает базовый тип) в папку с взгляды.