“.. must derive from WebViewPage, or WebViewPage

2019-02-21 09:32发布

问题:

I'm trying to get an MVC 3 Razor project going with MonoDevelop.

I've created a new ASP.net MVC 2 project using Mono 2.10.9 / MonoDevelop 3.0.4.7, and copied the below DLL's from an existing Windows-based MVC3 project to the "bin" directory of the Mono project:

System.Web.Helpers.dll
System.Web.Razor.dll
System.Web.WebPages.Deployment.dll
System.Web.WebPages.dll
System.Web.WebPages.Razor.dll

Have set the project to use Mono / .NET 4. The default Index file has been deleted and replaced with an Index.cshtml file. When I execute the project I get the below error:

The view at '~/Views/Home/Index.cshtml' must derive from WebViewPage, or WebViewPage<TModel>.

What's odd is that I've been through this process before and had MVC 3 pages working. It's only since upgrading Mono (which claims to support Razor...?) that it's now no longer working for me. The projects I've created previously with MVC3 all seem to compile and function in the new Mono version however.

Much appreciated if somebody could point out where I can find some wood amongst these trees :)

回答1:

If anybody does experience this, it's simply because the web.config file which resides under the "Views" folder has not been updated so one which references the MVC3 Razor components. Duh.

Easiest thing to do is copy one from an existing MVC3 project.



回答2:

Solution 1.

Add following line on top of your cshtml file.

@inherits System.Web.Mvc.WebViewPage

You must be wondering now thinking that views in ASP.NET MVC templates do not have this line on top of the cshtml file? So let’s see the second solution.

Solution 2.

Add a web.config file and specify the same setting for all the views. This is the minimum required code in this configuration file to get rid of this error message.

<?xml version="1.0"?>
<configuration>
  <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>
  </configSections>

  <system.web.webPages.razor>
    <pages pageBaseType="System.Web.Mvc.WebViewPage" ></pages>
  </system.web.webPages.razor>
</configuration> 

Actual setting required is pageBaseType="System.Web.Mvc.WebViewPage". Other text is only required to define the tags.

Reference Link: clickHere



回答3:

This link has a good explanation: http://blogs.msdn.com/b/gaurav/archive/2014/01/15/the-view-must-derive-from-webviewpage-or-webviewpage-lt-tmodel-gt-the-view-at-views-home-index-cshtml-must-derive-from-webviewpage-or-webviewpage-lt-tmodel-gt.aspx