web-dev-qa-db-ja.com

異なるコントローラーを使用したMVC5 Html.RenderAction

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名を渡します。

ここで間違っていることを理解できませんでした。誰かが指摘できますか?

25
SamTech

コントローラー名に「コントローラー」という接尾辞を追加している可能性がありますが、これは必須ではありません。

試してください:

@{Html.RenderAction("PriceRange", "Movies");}
55
Charlino

コントローラ名は、「MoviesController」ではなく「Movies」である必要があります。なぜなら今では、「MoviesControllerController」というコントローラーを探していると思うからです。

1
Bas Kooistra