【问题标题】:".. must derive from WebViewPage, or WebViewPage<TModel>" on MonoDevelop & MVC3 (OS X)MonoDevelop 和 MVC3 (OS X) 上的“.. 必须从 WebViewPage 或 WebViewPage<TModel> 派生”
【发布时间】:2019-04-11 04:47:59
【问题描述】:

我正在尝试让一个 MVC 3 Razor 项目与 MonoDevelop 一起使用。

我使用 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.cshtml 文件。当我执行项目时,出现以下错误:

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

奇怪的是,我以前经历过这个过程,并且 MVC 3 页面可以正常工作。只是在升级 Mono(它声称支持 Razor ......?)之后,它现在不再为我工作了。然而,我之前使用 MVC3 创建的项目似乎都可以在新的 Mono 版本中编译和运行。

如果有人能指出我在这些树中哪里可以找到一些木头,不胜感激:)

【问题讨论】:

    标签: asp.net-mvc-3 macos mono monodevelop


    【解决方案1】:

    如果有人确实遇到过这种情况,那仅仅是因为位于“Views”文件夹下的 web.config 文件尚未更新,因此它引用了 MVC3 Razor 组件。呵呵。

    最简单的做法是从现有的 MVC3 项目中复制一个。

    【讨论】:

    • +1 - 引用了 MVC 4.0。 dll 和 web 配置有与之关联的 3.0 版本。
    • 您是否愿意详细说明缺少哪些组件?
    • 在我的情况下 - 这是 web.config 中的这个人创建问题: (它有 5.0而不是正确的 5.1) 我使用的是 mvc5。
    • 我从一个运行良好的程序中复制了 web.config 和 .csproj 文件的整个引用部分,但我仍然得到这个。
    • 这帮助我找到了我的问题 - 一个 CI 进程正在将工件中的 web.config 文件重命名为 web.example.config,以免在部署时覆盖它们。我完全错过了 Views/web.config。
    【解决方案2】:

    解决方案 1。

    在您的 cshtml 文件顶部添加以下行。

    @inherits System.Web.Mvc.WebViewPage
    

    您现在一定想知道 ASP.NET MVC 模板中的视图 cshtml 文件顶部没有这一行?那么让我们看看 第二个解决方案。

    解决方案 2。

    添加一个 web.config 文件并为所有视图指定相同的设置。 这是此配置文件中获取的最低要求的代码 摆脱这个错误信息。

    <?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> 
    

    需要的实际设置是 pageBaseType="System.Web.Mvc.WebViewPage"。 仅需要其他文字 定义标签。

    参考链接:clickHere

    【讨论】:

    • 太奇怪了。我一丝不苟地复制了工作程序中的所有引用以及 web.config。网络配置中有所有这些东西,我已经确认版本都是正确的,等等。但在我输入解决方案 1 之前,我仍然遇到这个问题。然后它就起作用了。不知何故,我错过了一些东西。它必须与其中一个参考文献有关。也许缺少本地二进制文件或其他东西。但这似乎会导致比这更多的问题。
    【解决方案3】:

    出于某种原因,需要在顶部添加@model。我可以通过在页面顶部添加以下语句来修复,尽管我没有向该页面传递任何内容。

    @model String
    

    【讨论】:

    • 这是我的方案的解决方案。奇怪!
    猜你喜欢
    • 2013-07-29
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    • 2013-09-06
    • 2013-06-05
    • 1970-01-01
    • 2016-02-05
    • 1970-01-01
    相关资源
    最近更新 更多