Подтвердить что ты не робот

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;
}
<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title></title>
</head>
<body>
    <div>
            @RenderPage("Views/Partial1.cshtml")
    </div>
</body>
</html>

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

<div>Hello from Partial 1</div>

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

<add key="webpages:Enabled" value="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" />
    </namespaces>
  </pages>
</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">       
    <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" />
    <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" />
</sectionGroup>

7.Set RootView.cshtml в качестве начальной страницы

8.Run и получите следующую ошибку: "Тип" ASP._Page_RootView_cshtml "не наследуется от "System.Web.WebPages.WebPage".

Я не могу понять, как это исправить. Код Code Camper работает отлично. Я сравнивал строки за строкой и не вижу различий в коде, который мешал бы работать.

Мысли? Dan

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

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

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

Ответ 3

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

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

<add key="webpages:Enabled" value="false" />