Bonjour tout le monde,

Suite au Table déjà concues (cfr Ce post), nous avons décidés de changer le système des tables pour les rendre plus faciles à étendre afin de pouvoir rajouter des fonctionnalités plus simples par la suite.

Mon problème est le suivant :
J'ai un object de type Table<T> qui est le modèle d'une de mes vues.

J'ai donc le HtmlHelper suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
 public static MvcHtmlString Table<T>(this HtmlHelper<Table<T>> helper, Table<T> table) where T : IPrivateObject
        {
            StringBuilder sb = new StringBuilder();
            sb.AppendLine("<div class=\"EORTCTable-body\">");
            sb.AppendLine("<table>");
            sb.AppendLine(TableHeader(helper, table));
            sb.AppendLine(TableRows(helper, table));
            sb.AppendLine("</table>");
            sb.AppendLine("</div>");
            return MvcHtmlString.Create(sb.ToString());
        }
Tout ce passe bien de ce coté, mais lorsque j'arrive à l'appel suivant :
sb.AppendLine(TableRows(helper, table));
J'ai un gros problème. Cette méthode est supposé appelé le DisplayFor de chaque objet (object de type T), mais je n'arrive pas à obtenir un HtmlHelper de type T, il est toujorus de type HtmlHelper<Table<T>>.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private static string TableRows<T>(HtmlHelper<Table<T>> helper, Table<T> table) where T : IPrivateObject
        {
            StringBuilder sb = new StringBuilder();
            foreach (var item in table.Items)
            {
                sb.AppendLine("<tr>");
                foreach (var column in table.Columns)
                {
                    sb.AppendLine("<td>");
                    var lambda = column.Property.Compile();
                    sb.AppendLine(helper.DisplayFor(obj => lambda(item).ToString());
                    sb.AppendLine("</td>");
                }
                sb.AppendLine("</tr>");
            }
            return sb.ToString();
        }
Auriez-vous une solution pour obtenir un HtmlHelper<T> a partir d'un HtmlHelper<Table<T>> ?
En créer un nouveau semblait une bonne solution, mais je n'arrive pas a fournir les paramètres corrects au constructeur.

Pour ce qui est du cast, je ne sais pas si il est possible ?

Merci de votre aide.