28

我从 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 集合中的 Min 和 Max 价格设置到 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");}

我通过谷歌找到了几个例子,他们以同样的方式调用 RenderAction 助手,首先传递动作名称然后控制器名称。

我不明白我在这里做错了什么。有人可以指出吗?

4

2 回答 2

59

可能是您将“控制器”后缀添加到不需要的控制器名称中。

尝试:

@{Html.RenderAction("PriceRange", "Movies");}
于 2013-11-04T21:34:05.150 回答
1

控制器名称必须是“Movies”而不是“MoviesController”。因为现在我相信它正在寻找一个名为“MoviesControllerController”的控制器。

于 2016-10-11T17:19:47.927 回答