1

古いMVC2プロジェクトをMVC3に変換しました。今、私はかみそりの.cshtmlと一緒に.aspxビューを持っています。

コントローラ(HomeControllerIndexアクション、~\Views\Home\Index.aspx)に関連付けられたビューがあり、同時にまったく異なる ビューがあるとし~\Views\Shared\Index.aspxます。

通常、IndexActionが呼び出すView()と、レンダリングされ~\Views\Home\Index.aspxます。しかし、ビューをかみそりのビューに変換すると、レンダリングの代わりに同じアクションが~\Views\Home\Index.cshtml呼び出さ れます~\Views\Shared\Index.aspx

したがって、MVCは.cshtmlよりも.aspxページを優先すると思います。たぶん、web.configファイルで何かを変更する必要があります。これは、取得するビューを明示的に指定する必要があるためです。

View("~\Views\Home\Index.cshtml")

拡張子を削除してView("~\Views\Home\Index")も、正しいパスはありますが、共有.aspxビューが呼び出されます。不思議ですね。

4

1 に答える 1

5

あなたが抱えている問題は、MVC ビューのデフォルトの優先度です。デフォルトは次のとおりです。

~/Views/Home/Index.aspx
~/Views/Home/Index.ascx
~/Views/Shared/Index.aspx
~/Views/Shared/Index.ascx
~/Views/Home/Index.cshtml
~/Views/Home/Index.vbhtml
~/Views/Shared/Index.cshtml
~/Views/Shared/Index.vbhtml 

ご覧のとおり、同様の剃刀ビューの前に、共有ディレクトリ内であっても、すべての aspx/ascx ファイルが優先されます。

1 つの解決策は、 MVC Razor が .aspxよりも .cshtml を優先するようにすることですが、この解決策は aspx/ascx ファイルを再関連付けしません。したがって、次のようなものが必要です。

protected void Application_Start() 
{ 
  ViewEngines.Engines.Clear(); 
  ViewEngines.Engines.Add(new RazorViewEngine()); 
  ViewEngines.Engines.Add(new WebFormViewEngine()); 
} 
于 2012-04-26T15:51:05.427 に答える