J'utilise un Html.Grid d'un ensemble d'objets qui sont extraits d'une base de données (via LINQ to SQL). Voici le code de la grille (j'ai changé les données en quelque chose de artificiel). La page est fortement typée à People.Comment faire pour trier une liste de manière générique
<%=Html.Grid<People>(Model)
// Display chose solution information.
.Columns(column =>
{
column.For(person => person.Name);
column.For(person => person.Address.City);
}
)
%>
Dans la base de données, j'aurais une table de personnes et une table d'adresses liées par une clé étrangère. (Encore une fois, cela est artificiel - juste essayer de décrire le problème.)
Je veux permettre à l'utilisateur de trier les colonnes de manière générique. Le développeur précédent avait codé en dur dans le tri dans le contrôleur, comme si ...
//
// GET: Results/Grid
public ActionResult Grid(int id, GridSortOptions sort)
{
if (sort == null)
{
sort = new GridSortOptions();
}
Solution solution = repository.GetSolution(id);
List<People> people = solution.People.ToList();
if (!string.IsNullOrEmpty(sort.Column))
{
people = solution.People.ToList().OrderBy(sort.Column, sort.Direction).ToList();
}
return PartialView("Grid", people);
}
Cela fonctionne très bien lorsque l'objet je le tri est des gens (si je clique sur la colonne person.Name pour trier ascendant ou descendant). Cependant, quand je veux trier la colonne d'adresse, j'obtiens une exception parce que les gens ne contiennent pas une ville ... l'adresse fait.
Ma question est ... y a-t-il un moyen de faire ce genre génériquement sans savoir quel type est à l'avance? Merci.
Une partie de votre code n'est pas très claire 'ViewData [" sort "] = sort;' est-ce supposé être inversé? Y a-t-il seulement un niveau d'objets Enfant ou plus d'un? – msarchet
@msarchet - Je hérite de ce code d'un développeur précédent. Je ne crois pas que cette déclaration soit nécessaire. Mise à jour pour refléter cela. Merci. – JasCav