1 votes

Le moteur de visualisation Spark fonctionnera-t-il avec les pages maîtresses des webforms ?

J'aime beaucoup Spark, mais nous avons déjà beaucoup investi dans les vues basées sur les webforms. J'aimerais commencer à utiliser Spark sans avoir à convertir d'emblée toutes mes vues existantes.

Le seul problème que je rencontre pour faire fonctionner Spark en parallèle avec les webforms est celui des pages maîtres. Actuellement, j'ai des layouts Spark qui sont des duplications 1 pour 1 des pages maîtres.

Une telle duplication n'est pas acceptable. J'en ai déjà fait les frais à plusieurs reprises.

Est-ce qu'il y a un moyen de faire fonctionner les vues spark dans un master webforms ? Ou qu'une vue webforms fonctionne dans une mise en page spark ? L'un ou l'autre résoudrait le problème de la duplication.

5voto

Thomas G. Mayfield Points 5208

Pour ce faire, j'ai déplacé la majeure partie du contenu de ma page principale dans des vues partielles, puis j'ai créé deux pages principales, Foo.Master et Foo.Master.spark, qui utilisent toutes deux la même méthode Html.RenderPartial() : Foo.Master et Foo.Master.spark qui utilisent toutes deux les mêmes appels Html.RenderPartial(). Les deux pages maîtresses ont les mêmes zones de contenu nommées. Cela me permet d'utiliser l'un ou l'autre moteur pour une vue donnée et de réduire au maximum la duplication.

Un moteur de vue individuel est censé gérer à la fois son maître et sa vue. L'appel à IViewEngine est :

FindView(System.Web.Mvc.ControllerContext controllerContext, string viewName, string masterName, bool useCache)

Le maître n'est pas séparé de la vue.

Spark l'utilise pour compiler le master dans la vue et d'autres astuces avec son rendu multi-passages.

1voto

Rap Points 3307

Je ne pense pas que ce soit le cas. D'un point de vue architectural, les deux ont des manières complètement différentes et conflictuelles de rendre la page. Pour y parvenir, vous devrez faire quelque chose qui est l'équivalent d'une iFrame, une façon terriblement maladroite d'y parvenir au point d'en faire un anti-modèle.

Lorsque la page maîtresse est lue, le moteur d'étincelles a déjà terminé et vice-versa.

Vous pouvez essayer d'imiter la façon dont la page principale est rendue dans le moteur de recherche. Pas seulement visuellement ... Je parle de bricoler un pré-processeur de page maître à la maison en utilisant spark. Ce n'est pas une mince affaire.

0voto

queen3 Points 8810

Juste une idée, essayez d'écrire un moteur de vue personnalisé (ou d'adapter celui de Spark) qui rendra la vue .spark demandée en utilisant le moteur Spark, et qui appellera ensuite le moteur WebForms en lui passant le contenu rendu - je pense que cela devrait être possible, mais je n'ai aucune connaissance de ces aspects internes. Un moyen plus simple serait de sauvegarder le HTML .spark rendu dans un .aspx et de le faire récupérer par WebForms - mais les performances ne seront pas acceptables.

Quoi qu'il en soit, je dirais que cela devrait être possible mais 1) cela nécessitera des ajustements complexes des moteurs de vue et 2) vous perdrez une grande partie de la fonctionnalité Spark/layouts puisque vos vues .spark s'afficheront la plupart du temps sans layouts spark du tout.

Essayez également de poser des questions dans la liste de diffusion de Spark.

0voto

Frank Schwieterman Points 13519

Des résultats ?

J'ai pu héberger une vue spark dans un System.Web.Mvc.ViewUserControl et appeler Html.RenderView() à partir de la vue spark. Je parie que je pourrais aussi héberger une vue Spark dans un System.Web.Mvc.ViewUserControl en utilisant Html.RenderView(). Cela introduit quelques options (toutes avec des frais généraux) de partage de la page maître :

  1. Ecrivez un simple wrapper .ascx pour vos vues .spark. Elles ont le même objet modèle, le wrapper peut appeler HtmlRenderPartial sur la vue enveloppée.

  2. (vice versa) Écrire un simple wrapper .spark pour vos contrôles .ascx.

Lorsque j'ai essayé de faire en sorte que la vue Index.spark utilise la page maître Site.Master, j'ai reçu un message d'erreur :

The view 'Index' or its master could not be found. The following locations were searched:
~/Views/LfgSettings/Index.aspx
~/Views/LfgSettings/Index.ascx
~/Views/Shared/Index.aspx
~/Views/Shared/Index.ascx
Layouts\Site.spark
Shared\Site.spark

Je ne sais pas ce que ces chemins représentent, il semble que ce soit le chemin de recherche de la vue Index et le chemin de recherche de sa page principale. Il semble que le fichier .spark ne puisse pas utiliser une page maîtresse .master.

Je me demande cependant s'il est possible d'écrire un fichier .master enveloppant qui fait appel à un fichier .spark qui a les régions de contenu correctes. Un peu de Reflector'ing permettrait probablement de trouver des interfaces qui pourraient fonctionner ensemble.

0voto

ScottS Points 5247

Vous pouvez utiliser vos pages maîtresses existantes avec une page .aspx très simple qui appelle simplement Html.RenderPartial("MySparkView") pour obtenir le contenu de l'étincelle à l'intérieur de vos pages maîtresses existantes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X