J'ai une vue partielle que je veux être générique. Selon this question, les vues partielles ne peuvent pas être génériques. J'ai donc fait une extension HtmlHelper qui gère les pièces pour lesquelles je veux une sécurité de type, puis passe le reste à une vraie vue partielle.ASP.NET MVC Générique Vue partielle Motif
Habituellement, mon assistant est appelé sur le chargement de la page, ce qui fonctionne bien, mais parfois je veux ajouter une ligne ou quelque chose via AJAX. Lorsque cela se produit, le contrôleur ne peut pas utiliser ma "vue partielle" car il n'a pas accès au HtmlHelper.
En plus d'avoir une vue partielle avec un modèle de type object
, y at-il quelque chose que je peux faire? J'utilise Razor, si cela est important.
Une version simplifiée de ce que je fais:
public static MvcHtmlString DoStuff<T>(this HtmlHelper html, IEnumerable<T> data,
Func<T, ViewModelType> StronglyTypedFn, string PartialName)
{
// the pre- and post-processing for the partial view is complex enough I'd like
// to encapsulate it. But I want the encapsulation to include the safety
// benefits that generics give.
var mappedData = data.Select(StronglyTypedFn);
string htmlData = "";
foreach(var model in mappedData){
htmlData += html.Partial(PartialName, model);
}
htmlData += "some boilerplate footer html";
return htmlData;
}
je me rends compte que, dans cet exemple, j'ai si peu de lignes de code en dehors de la vue partielle qu'il semble inutile d'avoir une aide, mais dans mon véritable exemple, c'est plus complexe.
Maintenant, dans un appel ajax je veux retourner Html.DoStuff()
. Mais je ne peux pas, car cela nécessite un accès à la HtmlHelper, et l'aide n'est pas disponible dans un contrôleur.
Je ne comprends pas parfaitement votre scénario. Pourriez-vous montrer à quoi ressemble cette aide et comment vous l'appelez de votre point de vue? –
@Darin: J'ai ajouté un exemple. Il pourrait y avoir une meilleure façon d'accomplir cela sans rapport avec la façon dont je l'ai fait. – Xodarap
Alors, quel est le problème exact? Votre code semble bien. Vous faites allusion à "le contrôleur ne peut pas utiliser ma" vue partielle "car il n'a pas accès au HtmlHelper" mais on ne sait pas ce que vous essayez de faire dans le cas AJAX. – marcind