MVC5 Html.RenderAction与不同的控制器

Sam*_*ech 25 asp.net-mvc renderaction

我从MVC5开始,并从MVC5入门创建了第一个项目.

现在尝试使用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();
}
Run Code Online (Sandbox Code Playgroud)

它将电影集合中的最小和最大价格设置为稍后在视图中显示的ViewBag.我试图在不同的视图上呈现它.

首先,我尝试将其渲染Views/Movies/Index.cshtml如下

@{Html.RenderAction("PriceRange");}
Run Code Online (Sandbox Code Playgroud)

它在那里运行良好,结果显示正确,因为它正在使用MoviesController,方法PriceRange定义的同一个类.

然后我尝试Views/Hello/Index.cshtml使用HelloWorldController以下代码渲染它(此视图正在使用)(首先传递Action名称然后传递Controller名称)

@{Html.RenderAction("PriceRange", "MoviesController");}
Run Code Online (Sandbox Code Playgroud)

这里给出了运行时错误

未找到路径'/ 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");}
Run Code Online (Sandbox Code Playgroud)

我通过Google找到了一些例子,他们以相同的方式调用RenderAction助手,首先传递Action名称然后传递Controller名称.

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

Cha*_*ino 55

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

尝试:

@{Html.RenderAction("PriceRange", "Movies");}
Run Code Online (Sandbox Code Playgroud)

  • @ Html.Action在没有大括号的情况下做到这一点. (3认同)