ASP.Net MVC4 Root cshtml和“不从'System.Web.WebPages.WebPage继承”

时间:2013-01-18 15:38:45

标签: asp.net-mvc razor

我已经按照下面列出的步骤中的非常相似的帖子提供了答案。

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

概述

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

一步一步

下载here

1.创建一个名为“MVC4RootView”的新MVC4 Internet项目

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.将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.将sectionGroup name =“system.web.webPages.razor”添加到root web.config的configSections

<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代码工作正常。我已逐行比较,并发现代码中没有任何差异会妨碍工作。

思考? 丹

3 个答案:

答案 0 :(得分:23)

web.config文件夹中删除Views

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

答案 1 :(得分:1)

不要删除webconfig,是您视图中非常重要的文件!!!

相反,这样做:

启用&#34;查看所有文件&#34;在失败的Web项目中,搜索看似正确但未包含在visual studio中的文件,并将其删除。如果它在部署文件夹中失败,请尝试清理该文件夹,并重新部署该站点,您可能会有可能导致同样问题的不必要文件。

在我的情况下,在webproject的根目录下,我有一个额外的_ViewStart.cshtml副本(从项目中排除),我删除了该文件,这就行了。

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

答案 2 :(得分:1)

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

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

List<Insee> codeInsees = unite.getRefBonjourInsees();
Insee codeInsee = codeInsees.get(0)