我有一个部分视图,显示Categories
列表。我想把这个局部视图放在任何页面上,但是我想让它调用服务并自己获取类别的列表,而不必在每个控制器中都这样做行动。类似webforms的东西,你可以在其上放置代码隐藏。
例如。
操作
public ActionResult Index()
{
JobListViewModel model = new JobListViewModel();
model.Categories= jobService.GetCategories();
return View(model);
}
public ActionResult Details(int id)
{
Job job = jobService.GetJob(id);
return View(job);
}
我创建了一个部分,它将采用model.Categories
模型并显示一个列表。如您所见,索引页面可以正常工作,但我不想再在“详细信息”页面中再次调用它。有没有办法让我的部分视图单独调用GetCategories()
服务?
答案 0 :(得分:3)
使用Html.RenderAction - 它为部分视图提供了自己的控制器操作。
答案 1 :(得分:2)
您还应该使用属性[ChildActionOnly]标记部分操作。
答案 2 :(得分:0)
DVark,
如接受的答案中所述,对于您的方案,RenderAction是最合适的。
我以为我会链接一篇引述我对该主题的想法的文章(即何时使用RenderPartial与RenderAction):
http://cbertolasio.wordpress.com/2010/09/21/mvc-html-renderaction-vs-html-renderpartial/
希望有所帮助
[edit] - 暂且不说了。大约一年前,我没有理解RenderAction的力量,而是赞成RenderPartial。结果,我在共享的视图空间中散布了大量的视图,以便从各种来源访问它们。故事的寓意:在种植国旗之前了解你的“领土”。