web-dev-qa-db-ja.com

".. WebViewPageまたはWebViewPage <TModel>から派生する必要があります" MonoDevelopおよびMVC3(OS X)

MonoDevelopでMVC 3 Razorプロジェクトを実現しようとしています。

Mono 2.10.9/MonoDevelop 3.0.4.7を使用して新しいASP.net MVC 2プロジェクトを作成し、既存のWindowsベースのMVC3プロジェクトから以下のDLLを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バージョンでコンパイルおよび機能しているようです。

誰かが私がこれらの木の中でいくつかの木を見つけることができる場所を指摘できれば幸いです:)

16
Mr Chris

誰かがこれを経験した場合は、「Views」フォルダにあるweb.configファイルが更新されていないため、MVC3 Razorコンポーネントを参照しているためです。ああ。

最も簡単なことは、既存のMVC3プロジェクトからコピーすることです。

43
Mr Chris

解決策1。

Cshtmlファイルの上に次の行を追加します。

@inherits System.Web.Mvc.WebViewPage

ASP.NET MVCテンプレートのビューには、cshtmlファイルの上にこの行がないと思っているのではないでしょうか。それでは、2番目のソリューションを見てみましょう。

解決策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

23
Skull
1
marcolino

なんらかの理由で、@ modelを先頭に追加する必要があります。以下のステートメントをページの上部に追加することで修正できますが、そのページには何も渡しません。

@model String
1