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

Я работаю над 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 и т. Д. рискуя тем, что мои фреймворки будут развернуты наполовину, потому что половина файлов уже есть, я держу все полностью отдельно.

Ответы [ 2 ]

9 голосов
/ 17 мая 2011

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

4 голосов
/ 17 мая 2011

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

...