Cast HtmlHelper<Table<T>> to HtmlHelper<T>
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:
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 :
Citation:
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:
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.