MVC5 Html.RenderAction与不同的控制器

时间:2013-11-04 15:56:31

标签: asp.net-mvc renderaction

我从MVC5开始,并从MVC5 Getting Started创建了第一个项目。

现在尝试使用Partial Rendering并在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();
}

它将电影集合中的最小和最高价格设置为稍后在视图中显示的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名称。

我无法理解我在这里做错了什么。 有人可以指出吗?

2 个答案:

答案 0 :(得分:53)

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

尝试:

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

答案 1 :(得分:1)

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