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

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

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

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

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

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

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

Примечание: причина, по которой все разделилось, как это, нет никакого способа заставить NuGet перезаписать существующий код, и нет никакого способа запустить пустое веб-приложение MVC3, не подбирая все jQuery и т. д. ссылки, поэтому вместо того, чтобы рисковать тем, что моя структура будет наполовину развернута, потому что половина файлов я уже присутствую, но держу все в секрете.

2 ответов


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


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