如何使用DisplayFor渲染对象列表,但是从ASP.NET MVC中的控制器渲染?

时间:2010-05-13 10:57:11

标签: asp.net-mvc templates controller render

这是scenaio,我有一个Employee对象和一个包含员工列表的Company对象。

Company.aspx继承自ViewPage<Company>

在Company.aspx中,我致电

Html.DisplayFor(m => m.Employees).

我有Employee.ascx部分视图,该视图继承自ViewUserControl<Employee&gt;在我的DisplayTemplates文件夹中。

一切正常,Company.aspx为每位员工提供Employee.ascx部分内容。

现在我的控制器上还有两个名为GetEmployeesGetEmployee(Id)的方法。

GetEmployee(Id)操作中,我想返回标记以显示这一个员工,并在GetEmployees()我想呈现标记以显示所有员工(这两个操作方法将通过AJAX)。

在GetEmployee操作中,我调用

return PartialView("DisplayTemplates\Employee", employee)

虽然我更喜欢像

这样的东西,但这有效
return PartialViewFor(employee)

将根据惯例确定视图名称。

Anwyay,我的问题是我应该如何实施GetEmployees()行动?

我不想创建更多的观点,因为坦率地说,我不明白为什么我应该这样做。

我已经尝试过以下惨遭失败的事情:)

return Content(New HtmlHelper<IList<Of DebtDto>>(null, null).DisplayFor(m => debts));

但是如果我可以在我的控制器中创建一个HtmlHelper对象的实例,我想我可以让它工作,但感觉不对。

有什么想法吗?我错过了一些明显的东西吗?

1 个答案:

答案 0 :(得分:2)

我总是通过在IEnumerable<T>上循环部分视图并在每个项目上调用Html.DisplayFor()来解决这个问题,但后来我甚至不知道你可以致电Html.DisplayFor()IEnumerable<T>上并让它自动呈现每个模板元素,直到你在问题中这样说。谢谢你,顺便说一下! :)

无论如何,我认为最好的办法是简单地返回一个接受雇员集合的PartialView(),并且一次呈现一个调用Html.DisplayFor()。它不如从控制器返回HtmlHelper那么优雅,但至少它很容易实现。