没有控制器更新的ASP.NET MVC局部视图

时间:2011-01-11 04:18:10

标签: asp.net-mvc

我有一个部分视图,显示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()服务?

3 个答案:

答案 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。结果,我在共享的视图空间中散布了大量的视图,以便从各种来源访问它们。故事的寓意:在种植国旗之前了解你的“领土”。