web-dev-qa-db-fra.com

MVC5 Html.RenderAction avec un contrôleur différent

Je commence avec MVC5 et j'ai créé le premier projet à partir de MVC5 Getting Started .

Nous essayons maintenant avec le rendu partiel et avons ajouté une méthode dans MoviesController comme ci-dessous

[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();
}

Il définit les prix Min et Max de la collection Movies dans ViewBag qui sont ensuite affichés à la vue. J'essaie de le rendre sur des vues différentes.

J'ai d'abord essayé de le rendre à Views/Movies/Index.cshtml comme ci-dessous

@{Html.RenderAction("PriceRange");}

Il fonctionne bien là-bas et les résultats s'affichent correctement car il utilise MoviesController, la même classe que la méthode PriceRange définie.

Ensuite, j'ai essayé de le rendre à Views/Hello/Index.cshtml (cette vue utilise HelloWorldController) avec le code suivant (en passant d'abord le nom de l'action puis le nom du contrôleur)

@{Html.RenderAction("PriceRange", "MoviesController");}

Ici, il donne une erreur d'exécution

Le contrôleur pour le chemin "/ HelloWorld/Index" est introuvable ou n'implémente pas IController.

Voici le code complet de Views/Hello/Index.cshtml

@{
    ViewBag.Title = "Movie List";
}
<h2>My Movie List</h2>
<p>Hello from our view template</p>
@{Html.RenderAction("PriceRange", "MoviesController");}

J'ai trouvé quelques exemples via Google, ils appellent l'aide de RenderAction de la même manière, en passant d'abord le nom de l'action puis le nom du contrôleur.

Je ne pouvais pas comprendre ce que je fais de mal ici. Quelqu'un peut-il le signaler?

25
SamTech

Il se peut que vous ajoutiez le suffixe "Controller" au nom du contrôleur qui n'est pas requis.

Essayer:

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

Le nom du contrôleur doit être "Movies" et non "MoviesController". Parce que maintenant je crois qu'il cherche un contrôleur appelé "MoviesControllerController".

1
Bas Kooistra