我从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名称。
我无法理解我在这里做错了什么。 有人可以指出吗?
答案 0 :(得分:53)
可能是您将“Controller”后缀添加到控制器名称中,这不是必需的。
尝试:
@{Html.RenderAction("PriceRange", "Movies");}
答案 1 :(得分:1)
控制器名称必须是“电影”而不是“MoviesController”。因为现在我相信它正在寻找一个名为“MoviesControllerController”的控制器。