Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ASP.Net MVC4 Root cshtml and "does not inherit from 'System.Web.WebPages.WebPage"

I have followed the answers provided by very similar posts as you will see in the step by step listed below.

  • Razor view Type does not inherit from 'System.Web.WebPages.WebPage'

  • http://iamdotnetcrazy.blogspot.com/2012/08/how-to-solve-type-asppageviewstartcshtm.html

I still have the same error message "does not inherit from 'System.Web.WebPages.WebPage'"

Overview

I am learning from John Papa's "Single Page Apps with HTML5, Web API, Knockout and jQuery" on Pluralsight. The course outlines building an application called "Code Camper". The example MVC4 SPA creates a root view called "index.cshtml". where a series of @RenderPage calls are made. This application runs fine on my development machine. However, if i try to create from scratch a MVC4 SPA with a root view.cshtml I always get the error "does not inherit from 'System.Web.WebPages.WebPage"

Step by Step

Download here.

1.Create a new MVC4 Internet Project called "MVC4RootView"

2.In the root of the project, create a RootView.cshtml view.

@{
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.Added a “~/Views/Partial1.cshtml” with just a simple div

<div>Hello from Partial 1</div>

4.Modified root Web.Config webpages:Enabled to true.

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

5.Added system.web.webPages.razor to 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.Added sectionGroup name="system.web.webPages.razor" to configSections of root 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 as Start Page

8.Run and get the following error: "Type 'ASP._Page_RootView_cshtml' does not inherit from 'System.Web.WebPages.WebPage'.

I am at a loss of how to fix this. The Code Camper code works fine. I have compared line by line and see no differences in the code that would prevent from working.

Thoughts? Dan

like image 461
DapperDanh Avatar asked Jan 18 '13 15:01

DapperDanh


3 Answers

Remove the web.config from your Views folder.

As you're including Partial1.cshtml from that folder, it is also including the web.config from within there. And that web.config is saying that all pages must inherit from WebViewPage.

like image 164
ngm Avatar answered Oct 07 '22 11:10

ngm


I am a beginner to this, but one thing I did not realise is that cshtml pages are served through a controller, rather than by loading them directly.

In combination with the above, I also had to set the following key to false in the web.config file:

<add key="webpages:Enabled" value="false" />
like image 2
Phil Francis Avatar answered Oct 07 '22 11:10

Phil Francis


Do not delete the webconfig, is a very important file in your views!!!

Instead, do this:

Enable "View all Files" in the web project that is failing, and search for a file that seems correct but is not included in visual studio, and delete it. If it fails in your deployment folder, try to clean the folder as well, and re-deploy the site, you might have unnecesary files that might cause the same problem.

In my case, at the root of the webproject I had an extra copy of _ViewStart.cshtml (excluded from the project), I deleted that file, and that did the trick.

Hope it helps, let me know if this solve your problem as well.

like image 1
Yogurtu Avatar answered Oct 07 '22 13:10

Yogurtu