2010-05-13 10 views
2

Voici le scenaio, j'ai un objet employé et un objet Company qui a une liste d'employés. J'ai Company.aspx qui hérite de ViewPage<Company>.Comment rendre une liste d'objets en utilisant DisplayFor mais depuis le contrôleur dans ASP.NET MVC?

En Company.aspx j'appeler

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

J'ai une vue partielle Employee.ascx qui hérite de ViewUserControl<Employee> dans mon dossier DisplayTemplates.

Tout fonctionne bien et Company.aspx rend le Employee.ascx partiel pour chaque employé.

Maintenant, j'ai deux méthodes supplémentaires sur mon contrôleur appelé GetEmployees et GetEmployee(Id). Dans l'action GetEmployee(Id), je souhaite renvoyer le balisage pour afficher cet employé, et dans GetEmployees() je souhaite afficher le balisage pour afficher tous les employés (ces deux méthodes d'action seront appelées via AJAX).

Dans l'action GetEmployee j'appelle

return PartialView("DisplayTemplates\Employee", employee) 

Cela fonctionne, bien que je préfère quelque chose comme

return PartialViewFor(employee) 

qui déterminerait le nom de la vue par convention.

Anwyay, ma question est de savoir comment je devrais mettre en œuvre l'action GetEmployees()?

Je ne veux pas créer plus de vues, parce que franchement, je ne vois pas pourquoi je devrais le faire.

J'ai essayé la suite de quoi échoue lamentablement :)

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

Cependant, si je pouvais créer une instance d'un objet HtmlHelper dans mon contrôleur, je suppose que je pourrais le faire fonctionner, mais il se sent mal .

Des idées? Ai-je manqué quelque chose d'évident?

Répondre

2

J'ai toujours résolu ce problème en ayant une vue partielle qui boucle sur un IEnumerable<T> et appelle Html.DisplayFor() sur chaque point, mais je ne savais même pas que vous pourriez appeler Html.DisplayFor() sur un IEnumerable<T> et l'ont rendu automatiquement chaque élément basé sur un modèle jusqu'à ce que vous le disiez dans votre question. Merci pour ça, au fait! :)

Dans tous les cas, je pense que le mieux est de retourner simplement une PartialView() qui accepte une collection d'employés et les rend un à la fois appels Html.DisplayFor(). Ce n'est pas aussi élégant que de renvoyer un HtmlHelper depuis votre contrôleur, mais au moins c'est assez simple à implémenter.

+0

Cela ressemble à ce que je dois faire. Idéalement, je veux éviter de créer des vues partielles avec seulement 1 ligne de code. Je cherchais à créer un nouveau résultat d'action DisplayFor, mais encore une fois, je n'ai pas réussi à le faire fonctionner. En tout cas, merci pour votre contribution, et je suis content d'avoir pu vous aider :) – Darragh