2010-05-13 1 views
2

Вот scenaio, у меня есть объект Employee и объект Company, у которого есть список сотрудников.Как визуализировать список объектов с помощью DisplayFor, но с контроллера в ASP.NET MVC?

У меня есть 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) 

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

Anwyay, мой вопрос в том, как я должен выполнить действие GetEmployees()?

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

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

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

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

Любые идеи? Я пропустил что-то очевидное?

ответ

2

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

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

+0

Это похоже на то, что я должен сделать. В идеале я хочу избежать создания частичных представлений только с одной строкой кода. Я смотрел на создание нового результата действия DisplayFor, но опять же, я не смог заставить это работать. В любом случае, спасибо за ваш вклад, и я рад, что смог помочь вам :) – Darragh

Смежные вопросы