Question

Quels sont les choix possibles pour créer du contenu dynamique avec état sur un site Web ASP.Net?

Voici mon scénario. J'ai un site qui a plusieurs régions de contenu imbriquées. Le niveau supérieur correspond aux actions liées à un domaine fonctionnel Catalogue , Abonnements , Paramètres .

Lorsque vous cliquez sur l'action fonctionnelle, je souhaite ajouter dynamiquement du contenu spécifique à cette action. Par exemple, lorsque vous cliquez sur Catalogue, je souhaite afficher une arborescence avec les dossiers de catalogue & amp; fichiers, et une région à droite pour plus de détails.

Lorsqu'un utilisateur clique sur l'arborescence, je souhaite que les détails sensibles au contexte soient chargés dans la région de détails (comme les propriétés ou les options permettant de gérer les fichiers).

J'ai commencé avec UserControls . Ils ont bien fonctionné tant que je continuais à tout charger dans la page et que je ne les laissais jamais disparaître. Dès que l'un d'eux a disparu, ViewState de la page a explosé car l'arborescence de l'état de la vue n'était pas valide.

(Je ne voulais pas continuer à charger des éléments dans ma page car je ne voulais pas que les réponses soient trop volumineuses)

Ainsi, ma prochaine approche consistait à remplacer mes régions dynamiques par IFrames . Ensuite, au lieu d’instancier un UserControl , je voudrais simplement changer la source sur mon IFrame . Le contenu des IFrames étant des pages indépendantes, je n’ai rencontré aucun problème avec ViewState .

Mais je crains que IFrames ne soit un mauvais choix de conception, mais je ne comprends pas vraiment pourquoi. Le site n'est pas public, les moteurs de recherche ne sont donc pas un sujet de préoccupation.

Donc, pour finir, ma question.

Quelles sont mes options pour ce scénario? Si je choisis une solution Ajax (jQuery), devrai-je gérer mon propre ViewState? Y a-t-il d'autres considérations à prendre en compte?

Était-ce utile?

La solution

Quelques autres options:

  1. Le contenu uniquement semble être dynamique. Vous chargez suffisamment de contrôles sur la page pour gérer tout ce que vous voulez et seulement afficher ce dont vous avez besoin. Cela évite beaucoup de problèmes liés à l'état d'affichage et autres, mais signifie que votre page a une empreinte plus grande.
  2. Ajouter des contrôles à la page dynamiquement. Vous avez déjà joué avec cela, alors vous avez vu certains des problèmes ici. Rappelez-vous simplement que l'endroit pour créer vos contrôles dynamiques pour les publications est dans l'événement Page_Init (), et que si vous voulez qu'ils soient avec état, vous devez conserver cet état quelque part. Je recommande une base de données.

Autres conseils

Les contrôles ajoutés dynamiquement ne persistent pas dans l'état d'affichage, ce qui explique pourquoi peu importe si vous utilisez AJAX, iframes ou autre.

Une solution possible consiste à re-peupler les contrôles dans la publication. Le problème avec ceci, est le cycle de vie de la page (simplifié) est:

  1. Initialiser
    • LoadViewState
    • Charger les données de postback
    • Événements de charge du contrôle d'appel
    • Evénement de chargement d'appel
    • Evénements de contrôle des appels
    • Contrôle PreRender
    • PreRender
    • SaveViewState
    • Décharger

Initialiser est le seul endroit où cela peut être ajouté à nouveau à vos contrôles dynamiques. Sinon, les données publiées (ou les informations sur l'état d'affichage) ne sont pas chargées dans ce contrôle. Mais souvent, comme les données Viewstat / postback ne sont pas encore disponibles dans Initialize, votre code ne dispose pas des informations nécessaires pour déterminer les contrôles à ajouter.

La seule autre solution que j'ai trouvée dans cette situation consiste à utiliser un contrôle tiers appelé DynamicControlsPlaceholder . Cela fonctionne très bien et conserve les informations de contrôle dans viewstate.

Dans votre cas particulier, il ne semble pas y avoir autant de choix / de cas. Est-il pratique d’avoir simplement tous les différents ensembles de contrôles dans la page et de les placer à l’intérieur de asp: contrôles fictifs, puis d’en définir un visible, en fonction de ce qui est sélectionné?

vous avez différentes options, et oui, les IFrames étaient un mauvais choix de conception.

La première option est la solution AJAX. Et, avec cela, il n’ya pas vraiment de scénario viewstate, c’est juste que vous transmettez des données avec le serveur Web, construisant l’UI à la volée au besoin.

L'option suivante consiste à ajouter dynamiquement, à chaque fois, les contrôles dont vous avez besoin pour un message donné. La façon dont cela fonctionnerait, c'est qu'au début du cycle de vie d'une page, vous devez reconstruire la page exactement telle qu'elle a été envoyée la dernière fois, puis vider tous les contrôles inutiles et construire uniquement ceux qui le souhaitent. .

Une troisième option consisterait à utiliser des pages maîtres. Votre contenu de niveau supérieur peut se trouver sur la page principale elle-même et contenir des liens vers différentes pages du site Web.

Si je dispose de suffisamment de temps, je pourrais en proposer davantage, mais ces 3-là ne sont apparus qu’à la lecture de votre problème.

les commandes dynamiques et l'état d'affichage ne font pas bon ménage, comme indiqué ci-dessus - mais c'est une bonne chose, car même s'ils le faisaient, l'état d'affichage d'une page dynamique complexe deviendrait tellement gonflé que les performances diminueraient à néant

utilisez Ajax [j'aime AJAX PRO car il est très simple à utiliser] et gérez vous-même l'état de la page [en session, dans les tables de base de données ou tout ce qui convient à votre scénario]. Cela sera un peu plus compliqué à faire, mais les résultats seront efficaces et réactifs: chaque page ne peut mettre à jour que ce qui doit changer, et vous ne déplacerez jamais une chaîne de vues gigantesque

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top