在MonoDevelop和MVC3(OS X)上,"..必须派生自WebViewPage或WebViewPage<TModel>"

20

我正在尝试使用MonoDevelop创建一个MVC 3 Razor项目。

我使用Mono 2.10.9 / MonoDevelop 3.0.4.7创建了一个新的ASP.net MVC 2项目,并将下面的DLL从现有的基于Windows的MVC3项目复制到Mono项目的“bin”目录中:

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

我已将项目设置为使用Mono / .NET 4。默认的Index文件已被删除,并替换为Index.cshtml文件。当我执行该项目时,出现以下错误:

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

很奇怪的是,我之前已经进行过这个过程,并且有 MVC 3 页面在工作。但自从我升级了 Mono(声称支持 Razor...?)后,它现在对我不再起作用了。我以前使用 MVC3 创建的项目似乎都可以在新的 Mono 版本中编译和运行。

非常感谢如果有人能指出在这些树木中我可以找到木材的地方 :)

3个回答

59
如果有人遇到这种情况,那只是因为“Views”文件夹下的web.config文件没有更新为引用MVC3 Razor组件的文件。很简单。 最简单的方法是从现有的MVC3项目中复制一个。

1
+1 - 引用了 MVC 4.0 的 dll,但 web config 文件中与之关联的版本为 3.0。 - Darren
你可以详细说明具体缺少哪些组件吗? - A.R.
1
在我的情况下,是web.config文件中的这个人制造了问题:<bindingRedirect oldVersion="0.0.0.0-5.1.0.0" newVersion="5.1.0.0" />(它将5.0写成了正确的5.1)。我正在使用mvc5。 - sandeep talabathula
1
我从一个正常工作的程序中复制了web.config和.csproj文件的整个引用部分,但仍然出现这个问题。 - Shavais
这帮助我找到了问题 - 一个CI过程正在将artifacts中的web.config文件重命名为web.example.config,以便在部署时不覆盖它们。我完全没有Views/web.config文件。 - Jeremy Murray
谢谢!我只需要将 Razor 文件夹移动到 Views 文件夹中。这是个愚蠢的错误,但完全有道理。 - Teyler Halama

34

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.

参考链接:点击这里


好奇怪啊。我仔细地从一个工作中的程序复制了所有的引用,以及 web.config 文件。该文件包含了所有这些东西,并且我已经确认所有版本都是正确的等等。但直到我使用解决方案 1 才解决了这个问题。不知何故,我错过了某些东西。它一定与其中一个引用有关。也许是缺少某个本地二进制文件之类的原因。但这似乎会引起比这更多的问题。 - Shavais

2

由于某些原因,需要在页面顶部添加@model。我可以通过在页面顶部添加以下语句来解决此问题,尽管我并没有将任何内容传递给该页面。

最初的回答:

出于某种原因,需要在页面顶部添加@model。我可以通过在页面顶部添加以下语句来解决此问题,即使我不向该页面传递任何内容。

@model String

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接