Как я могу отобразить список объектов, используя DisplayFor, но из контроллера в ASP.NET MVC? - PullRequest
2 голосов
/ 13 мая 2010

Вот сценарий, у меня есть объект Employee и объект Company, в котором есть список сотрудников.

У меня есть Company.aspx, который наследуется от ViewPage<Company>.

В Company.aspx я звоню

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

У меня есть Employee.ascx частичное представление, которое наследуется от ViewUserControl<Employee> в моей папке DisplayTemplates.

Все работает нормально, а Company.aspx отображает частичное значение Employee.ascx для каждого сотрудника.

Теперь у меня есть два дополнительных метода на контроллере, которые называются GetEmployees и GetEmployee(Id).

В действии GetEmployee(Id) я хочу вернуть разметку для отображения этого одного сотрудника, а в GetEmployees() я хочу отобразить разметку для отображения всех сотрудников (эти два метода действия будут вызваны через AJAX).

В действии GetEmployee я вызываю

return PartialView("DisplayTemplates\Employee", employee)

Это работает, хотя я бы предпочел что-то вроде

return PartialViewFor(employee)

, который будет определять имя представления по соглашению.

Ануэй, мой вопрос: как мне выполнить действие GetEmployees()?

Я не хочу создавать больше представлений, потому что, честно говоря, я не понимаю, почему я должен это делать.

Я попробовал следующее, что с треском провалилось:)

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

Однако, если бы я мог создать экземпляр объекта HtmlHelper в моем контроллере, я полагаю, я мог бы заставить его работать, но это не так.

Есть идеи? Я что-то упустил очевидное?

1 Ответ

2 голосов
/ 14 мая 2010

Я всегда решал эту проблему, имея частичное представление, которое зацикливается на IEnumerable<T> и вызывает Html.DisplayFor() для каждого элемента, но тогда я даже не знал, что вы можете вызвать Html.DisplayFor() на IEnumerable<T> сделайте так, чтобы он автоматически отображал каждый шаблонный элемент, пока вы не ответите так в своем вопросе. Спасибо за это, кстати! :)

В любом случае, я думаю, что вам лучше всего просто вернуть PartialView(), который принимает набор сотрудников и отображает их по одному , звонит Html.DisplayFor(). Это не так элегантно, как возвращение HtmlHelper из вашего контроллера, но, по крайней мере, достаточно просто для реализации.

...