Представление должно быть производным от WebViewPage или WebViewPage <TModel> - PullRequest
73 голосов
/ 15 ноября 2011

Я следую Учебник Джастина Слэттери по архитектуре плагинов и пытаюсь адаптировать его для Razor вместо WebForm Views.

Все остальное (контроллеры, загрузка сборки плагина и т. Д.), По-видимому,быть в порядке.Однако я не могу заставить встроенные представления Razor работать должным образом.Когда я пытаюсь перейти к «HelloWorld / Index», я получаю следующую ошибку:

The view at '~/Plugins/MyProjectPlugin.dll/MyProjectPlugin.Views.HelloWorld.Index.cshtml' must derive from WebViewPage or WebViewPage<TModel>.

Исключение выдается System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) +262

Я могу включить полную трассировку стека,если нужно.

Может кто-нибудь посоветовать, что я могу делать не так?

Ответы [ 7 ]

156 голосов
/ 15 ноября 2011

Вы можете оформить следующую запись в блоге , которая более адаптирована к Razor.

Но чтобы ответить на ваш вопрос, поскольку вы теперь обслуживаете свои виды из нестандартного местоположения, больше нет файла ~/Views/web.config, который применяется и позволяет вам указать базовый тип для ваших видов бритвы. Поэтому вам может потребоваться добавить следующее в верхней части каждого вида бритвы:

@inherits System.Web.Mvc.WebViewPage
@model ...
6 голосов
/ 24 июля 2013

Примечание: у меня была чрезвычайно похожая проблема, и мне пришлось наконец отследить, что я был единственным разработчиком, с MVC 4.0.0.0, связанным в их решении./ работает без ошибок.

TL; DR Убедитесь, что ваши ссылки такие же, как и у остальных членов вашей группы разработки.

1 голос
/ 06 января 2015

У меня была такая же проблема, потому что я не зафиксировал папку пакетов, которая содержит библиотеки бритвы. Затем я добавил пакет, он работал, но после восстановления он сломался. Затем я отключил автоматический запуск nuget при сборке, и теперь он работает нормально. В моем случае Nuget все испортил.

0 голосов
/ 03 февраля 2017

Я получил эту ошибку, когда попытался добавить леса MVC (в частности, папку Views) в проект Web API. Ответ Дарина Димитрова говорит:

больше нет файла ~/Views/web.config, который применяется и позволяет вам указать базовый тип для ваших видов бритвы

И в комментариях к этому ответу joelnet сказал :

Мне удалось скопировать файл web.config из ~ / Views в мое альтернативное местоположение, чтобы решить мою проблему с этим.

и Поль д'Ауст сказал :

Если у вас возникли проблемы с получением решения в комментарии @ joelnet, попробуйте очистить и перестроить проект.

Эти подсказки помогли мне найти решение.

Сначала я скопировал Web.config из папки Views другого проекта в том же решении в мою новую папку Views. Я переименовал основной тег namespace в соответствии с новым проектом, и после получения ошибки удалил еще один <add namespace="..." />, который мне не нужен. Затем я запустил сборку (только нормальную сборку, мне не нужно было чистить и перестраивать), и я смог загрузить свой новый вид без ошибок.

0 голосов
/ 14 сентября 2016

Я хочу поделиться своей болью .. сайт работал нормально локально, однако, когда я публиковал в IIS клиента, он выдавал эту ошибку.Все файлы web.config (root и / Views) идеально совпадают с рабочей копией сайта.

Одно из представлений (logon.cshtml) имело несовместимые окончания строк, и я не нажал кнопку «да», чтобы исправитьэто на моем компьютере с Windows.

Нажав кнопку «Да» в диалоговом окне «Несогласованные окончания строк» ​​и опубликовав представление logon.cshtml, я исправил это.

0 голосов
/ 04 апреля 2016

Установить пакет: Install-Package Microsoft.AspNet.WebPages

0 голосов
/ 01 июня 2015

Только что получил эту ошибку сегодня при обновлении старого MVC3-проекта до версии 4, и для меня решение было удалить атрибут appliesTo="v2.0.50727" в разделе <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">.

...