Подтвердить что ты не робот

MVC5 Html.RenderAction с другим контроллером

Я начинаю с MVC5 и создаю первый проект из MVC5 Getting Started.

Теперь попробуйте с Partial Rendering и добавьте метод в MovieController, как показано ниже

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

Он устанавливает минимальную и максимальную цену из коллекции фильмов в ViewBag, которые позже отображаются в представлении. Я пытаюсь сделать это на разных представлениях.

Сначала я попытался отобразить его на Views/Movies/Index.cshtml ниже

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

Он хорошо работает, и результаты отображаются правильно, потому что он использует MoviesController, тот же класс, где определяется метод PriceRange.

Затем я попытался отобразить его в Views/Hello/Index.cshtml (это представление использует HelloWorldController) со следующим кодом (сначала передайте имя Action, затем имя контроллера)

@{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, а затем имя контроллера.

Я не мог понять, что я тут делаю. Может кто-нибудь указать?

4b9b3361

Ответ 1

Возможно, вы добавляете постфикс "Контроллер" к имени контроллера, которое не требуется.

Try:

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

Ответ 2

Имя контроллера должно быть "Фильмы", а не "MovieController". Потому что теперь я считаю, что он ищет контроллер под названием "MovieControllerController".