ASP.Net MVC4 Root cshtml и "не наследуется от" System.Web.WebPages.WebPage "

Я следил за ответами, предоставленными очень похожими сообщениями, как вы увидите в пошаговом описании ниже.

У меня все еще такое же сообщение об ошибке "не наследуется от "System.Web.WebPages.WebPage"

Обзор

Я изучаю от John Papa "Одиночные страницы с HTML5, веб-API, нокаутом и jQuery" на Pluralsight. В курсе описывается создание приложения под названием "Code Camper". Пример MVC4 SPA создает корневой вид под названием "index.cshtml". где производится серия вызовов @RenderPage. Это приложение отлично работает на моей машине разработки. Однако, если я попытаюсь создать с нуля MVC4 SPA с корнем view.cshtml, я всегда получаю ошибку "не наследует от "System.Web.WebPages.WebPage"

Шаг за шагом

Загрузите здесь.

1.Создайте новый проект MVC4 в Интернете под названием "MVC4RootView"

2.В корне проекта создайте представление RootView.cshtml.

@{
Layout = null;
}
 
 
 <div>
 @RenderPage("Views/Partial1.cshtml")
 </div>

3. Добавил "~/Views/Partial1.cshtml" только с простым div

<div>Hello from Partial 1</div>

4. Модифицированные корневые веб-страницы Web.Config: включены в true.

5.Added system.web.webPages.razor для root Web.config

<system.web.webpages.razor>
 <host factorytype="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.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.Optimization">
 <add namespace="System.Web.Routing">
 </add></add></add></add></add></namespaces>
 </pages>
</host></system.web.webpages.razor>

6.Добавленный разделГруппа name= "system.web.webPages.razor" в configSections корневого web.config

<sectiongroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup,
 System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral,
 PublicKeyToken=31BF3856AD364E35"> 
 </sectiongroup><section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection,
 System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral,
 PublicKeyToken=31BF3856AD364E35" requirepermission="false"><code></code><section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection,
 System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral,
 PublicKeyToken=31BF3856AD364E35" requirepermission="false">
<p>7.Set RootView.cshtml в качестве начальной страницы</p>
<p>8.Run и получите следующую ошибку: "Тип" ASP._Page_RootView_cshtml "не наследуется от "System.Web.WebPages.WebPage".</p>
<p>Я не могу понять, как это исправить. Код Code Camper работает отлично. Я сравнивал строки за строкой и не вижу различий в коде, который мешал бы работать.</p>
<p>Мысли?
Dan</p></section></section>
3 ответа

Удалите web.config из папки Views.

Поскольку вы включаете Partial1.cshtml из этой папки, он также включает web.config изнутри. И этот web.config говорит, что все страницы должны наследоваться от WebViewPage.


Не удаляйте webconfig, это очень важный файл в ваших представлениях.

Вместо этого сделайте следующее:

Включите "Просмотр всех файлов" в веб-проекте, который не работает, и найдите файл, который кажется правильным, но не включен в визуальную студию, и удалите его. Если он не работает в вашей папке развертывания, попробуйте также очистить папку и повторно развернуть сайт, у вас могут быть ненужные файлы, которые могут вызвать такую ​​же проблему.

В моем случае, в корне webproject у меня была дополнительная копия _ViewStart.cshtml(исключена из проекта), я удалил этот файл и сделал трюк.

Надеюсь, что это поможет, дайте мне знать, если это также решит вашу проблему.


Я новичок в этом, но одна вещь, которую я не понимал, это то, что страницы cshtml обслуживаются через контроллер, а не загружают их напрямую.

В сочетании с вышеизложенным мне также пришлось установить следующий ключ в false в файле web.config:

licensed under cc by-sa 3.0 with attribution.