MVC5から始めて、最初のプロジェクトを MVC5 Getting Started から作成しました。
現在、部分レンダリングを試し、以下のようにMoviesControllerにメソッドを追加しました
[ChildActionOnly]
public ActionResult PriceRange()
{
var maxprice = db.Movies.Max(m => m.Price);
var minprice = db.Movies.Min(m => m.Price);
ViewBag.MaxPrice = maxprice;
ViewBag.MinPrice = minprice;
return PartialView();
}
MoviesコレクションからViewBagに最小価格と最大価格を設定し、後で表示するときに表示します。別のビューでレンダリングしようとしています。
まず、次のようにViews/Movies/Index.cshtml
でレンダリングしようとしました
@{Html.RenderAction("PriceRange");}
メソッドMoviesController
が定義されているのと同じクラスであるPriceRange
を使用しているため、そこでうまく機能し、結果が正しく表示されます。
次に、次のコードで最初にViews/Hello/Index.cshtml
(このビューはHelloWorldController
を使用)でレンダリングしようとしました(最初にアクション名、次にコントローラー名を渡します)
@{Html.RenderAction("PriceRange", "MoviesController");}
ここでは、実行時エラーが発生しています
パス '/ HelloWorld/Index'のコントローラーが見つからなかったか、IControllerを実装していません。
Views/Hello/Index.cshtmlの完全なコードを次に示します。
@{
ViewBag.Title = "Movie List";
}
<h2>My Movie List</h2>
<p>Hello from our view template</p>
@{Html.RenderAction("PriceRange", "MoviesController");}
Googleを通していくつかの例を見つけました。それらは同じ方法でRenderActionヘルパーを呼び出しており、最初にAction名、次にController名を渡します。
ここで間違っていることを理解できませんでした。誰かが指摘できますか?
コントローラー名に「コントローラー」という接尾辞を追加している可能性がありますが、これは必須ではありません。
試してください:
@{Html.RenderAction("PriceRange", "Movies");}
コントローラ名は、「MoviesController」ではなく「Movies」である必要があります。なぜなら今では、「MoviesControllerController」というコントローラーを探していると思うからです。