17

我遵循了非常相似的帖子提供的答案,您将在下面列出的分步中看到。

我仍然有相同的错误消息“不继承自'System.Web.WebPages.WebPage'”

概述

我正在学习 Pluralsight 上 John Papa 的“使用 HTML5、Web API、Knockout 和 jQuery 的单页应用程序”。该课程概述了构建一个名为“Code Camper”的应用程序。示例 MVC4 SPA 创建一个名为“index.cshtml”的根视图。在其中进行了一系列 @RenderPage 调用。这个应用程序在我的开发机器上运行良好。但是,如果我尝试从头开始创建带有根 view.cshtml 的 MVC4 SPA,我总是会收到错误“不继承自 'System.Web.WebPages.WebPage”

一步步

在这里下载。

1.新建一个名为“MVC4RootView”的MVC4 Internet Project

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网页:启用为真。

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

5.添加system.web.webPages.razor到根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.root web.config的configSections增加sectionGroup name="system.web.webPages.razor"

<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.设置RootView.cshtml为起始页

8.运行并得到以下错误:“类型'ASP._Page_RootView_cshtml'不继承自'System.Web.WebPages.WebPage'。

我不知道如何解决这个问题。Code Camper 代码运行良好。我逐行比较,发现代码中没有任何差异会阻止工作。

想法?担

4

3 回答 3

23

web.config从您的Views文件夹中删除。

当您Partial1.cshtml从该文件夹中包含时,它还包含其中的 web.config。而那个 web.config 是说所有页面都必须从 WebViewPage 继承。

于 2013-01-19T02:06:08.037 回答
2

我是这方面的初学者,但我没有意识到的一件事是 cshtml 页面是通过控制器提供的,而不是直接加载它们。

结合以上内容,我还必须在 web.config 文件中将以下键设置为 false:

<add key="webpages:Enabled" value="false" />
于 2017-10-16T14:19:11.593 回答
1

不要删除webconfig,在你看来是一个非常重要的文件!!!

相反,请执行以下操作:

在失败的 Web 项目中启用“查看所有文件”,然后搜索看起来正确但未包含在 Visual Studio 中的文件,然后将其删除。如果它在您的部署文件夹中失败,请尝试清理该文件夹,然后重新部署该站点,您可能有可能导致相同问题的不必要文件。

在我的例子中,在 webproject 的根目录中,我有一个额外的 _ViewStart.cshtml 副本(从项目中排除),我删除了该文件,并且成功了。

希望它有所帮助,让我知道这是否也解决了您的问题。

于 2017-08-18T12:35:29.370 回答