【问题标题】:How can I render a list of objects using DisplayFor but from the controller in ASP.NET MVC?如何使用 DisplayFor 但从 ASP.NET MVC 中的控制器呈现对象列表?
【发布时间】:2010-05-13 10:57:10
【问题描述】:

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

我有Company.aspx,它继承自ViewPage<Company>

在 Company.aspx 我调用

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

我的 DisplayTemplates 文件夹中有一个 Employee.ascx 部分视图,它继承自 ViewUserControl<Employee>。

一切正常,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 对象的实例,我想我可以让它工作,但感觉不对。

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

【问题讨论】:

    标签: asp.net-mvc templates controller render


    【解决方案1】:

    我总是通过有一个部分视图来解决这个问题,它循环一个 IEnumerable&lt;T&gt; 并在每个项目上调用 Html.DisplayFor(),但是我什至不知道你可以在 IEnumerable&lt;T&gt; 上调用 Html.DisplayFor() 和让它自动呈现每个模板化元素,直到您在问题中这么说。顺便说一句,谢谢! :)

    无论如何,我认为你最好的选择是简单地返回一个PartialView(),它接受一个员工集合并一次呈现一个调用Html.DisplayFor()。它不像从控制器返回 HtmlHelper 那样优雅,但至少实现起来足够简单。

    【讨论】:

    • 看起来这就是我必须做的。理想情况下,我想避免仅使用 1 行代码创建部分视图。我一直在寻找创建一个新的 DisplayFor 操作结果,但同样,我无法让它工作。无论如何,感谢您的意见,我很高兴能够帮助您:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    相关资源
    最近更新 更多