envoi de données d’un sous-test à un autre dans sitecore

J’ai de la difficulté à construire un système de filtrage dans Sitecore 7.

J’ai 2 sous-compositions, au même niveau de la page.

La sous-rubrique A est une barre latérale contenant une liste de cases à cocher et contenant un événement qui remplit une liste avec les valeurs sélectionnées. La sous-sélection B affiche un ensemble d’éléments.

Ce que je voudrais faire, c’est envoyer la liste remplie de la sous-parsing A à la sous-parsing B afin de filtrer la liste des éléments en fonction de ce que l’utilisateur a sélectionné. J’ai pu le faire en passant les données à travers Session, mais ce n’est pas une manière optimale de gérer ces données.

J’ai essayé de définir une propriété pour sublayout A et d’y charger la liste, mais je ne peux pas obtenir l’instance exacte de sublayout A à partir de sublayout B afin de lire la propriété remplie. En outre, essayer de Page.FindControl (“IdOfSomeElementFromSublayoutA”) renvoie toujours null dans Sublayout B. Même si j’ai converti Page en tant que page .aspx contenant les deux Sublayouts.

J’utilise Sitecore 7 Update 2.

Merci beaucoup pour votre temps.

La meilleure façon de le faire est de soulever (et de souscrire) des événements à l’aide de la classe Sitecore.Events.Event . La sous-répartition de votre barre latérale déclencherait un événement en utilisant quelque chose comme ce qui suit dans le gestionnaire d’événements de clic d’un bouton:

 Sitecore.Events.Event.RaiseEvent("YourEventName", new YourEventArgsClass { Property = "SomeValue" }); 

ensuite, dans l’autre sous-tâche, vous devez disposer des éléments suivants pour gérer l’événement:

 public partial class YourOtherSublayout : System.Web.UI.UserControl { private System.EventHandler eventHandlerRef; protected void Page_Load(object sender, EventArgs e) { eventHandlerRef = EventHandlerMethod; Sitecore.Events.Event.Subscribe("YourEventName", eventHandlerRef); } protected void Page_Unload(object sender, EventArgs e) { if (eventHandlerRef != null) { Sitecore.Events.Event.Unsubscribe("YourEventName", eventHandlerRef); } } private void EventHandlerMethod(object sender, EventArgs e) { if (e != null) { //do stuff here } } } 

Remarque: il est important de conserver le code Page_Unload, sinon vous verrez la méthode EventHandler appelée plusieurs fois.