Question

J'utilise trois composants WebPart.Le Webpart A crée une valeur lorsque l'utilisateur clique sur le bouton dans le Webpart A.WebPart B utilise cette valeur pour créer une liste avec les éléments que l'utilisateur peut sélectionner.WebPart C utilise les deux valeurs pour créer une chaîne à des fins de test.

WebPart B utilise cette liste pour remplir une liste déroulante.Chaque fois que la valeur sélectionnée est modifiée, elle doit mettre à jour le WebPart C.C'est la déclaration du contrôle.

_documentTypeList = new DropDownList();
_documentTypeList.AutoPostBack = true;
this.Controls.Add(_documentTypeList);

Le problème ici est qu'en utilisant

_documentTypeList.AutoPostBack = true;

recharge la page complète et réinitialise la valeur du WebPart A à null.Comment envoyer la nouvelle valeur du WebPart B au WebPart C sans perdre la valeur du WebPart A ?Tout cela se passe sur 1 page.

Était-ce utile?

La solution

la sauvegarde des variables d'état de session peut être effectuée en utilisant :

    public string Name
    {
        get
        {
            return Page.Session["SaveName"] as string;
        }
        set
        {
            Page.Session["SaveName"] = value;
        }
    }

c'est un getter/setter pour sauvegarder/obtenir à partir de l'état de session

pour l'utiliser, procédez comme suit :

cela obtient la valeur de l'état de la session (doit être dans l'événement onPreRender pour voir les variables de l'état de la session)

txtName.Text = Name;

cela passe à l'état de session (peut être n'importe où vous souhaitez enregistrer dans l'état de session)

Name = txtName.Text;

pour la valeur int :

cahnge public string Name à public int Name et il en va de même pour tout le reste comme les valeurs booléennes, etc.

donc cela ressemblerait à ceci pour int :

    public int Name
    {
        get
        {
            return Page.Session["SaveName"] as int;
        }
        set
        {
            Page.Session["SaveName"] = value;
        }
    }

Comme d'autres l'ont noté, pour que les données soient transmises entre les composants WebPart, vous devez utiliser la méthode iInterface :

fournir (le composant Webpart envoyant des données) le consommateur (le composant Webpart utilisant ces données) et l'interface qui constitue la connexion entre les composants WebPart :

ce qui précède fonctionnera à 100% et enregistrera vos valeurs lors de la publication :)

juste au cas où vous en auriez besoin ;) J'ai posté quelques liens sur les connexions ci-dessous.

Problèmes de composants WebPart connectables................................ ?

et

Connexion entre 2 composants WebPart

J'espère que cela aide :)

Autres conseils

As-tu essayé if (!Page.IsPostBack) { your code here } ?

Avez-vous essayé de créer une connexion Web personnalisée pour votre objectif?Passer par votre exigence peut être l'option la plus appropriée

précédemment les parties Web où sont connectées à l'ordre suivant.

WebPart A => WebPart B
WebPart B => WebPart C
WebPart A => WebPart C

Ceci a créé une erreur si je voulais appeler les deux valeurs dans WebPart C lorsque j'ai changé la valeur dans WebPart B. Chaque fois que la valeur de WebPart B a été modifiée, il était nécessaire de recharger la page et de recharger le WebPart A. Parce que WebPart A avait un La valeur qui est créée sur l'interaction utilisateur et non sur la charge de la page de la valeur a été perdue. WebPart B et WebPart C saisi pour fonctionner sans la valeur de WebPart A. Si vous souhaitez conserver la connexion WebPART comme décrit ci-dessus, veuillez vérifier la réponse de FaysharePointMaster.

Parce que dans mon cas, webpart A crée un jeton de connexion unique, je préfère ne pas l'enregistrer à la page. Je préférerais le garder avec les webparts. Pour ce faire, j'ai changé la connexion entre eux. Au lieu de ci-dessus, j'ai utilisé la connexion suivante.

WebPart A => WebPart B => WebPart C

WebPart B enregistre la valeur de WebPart A et le fournit avec sa propre valeur à WebPart C. Voici comment on dirait actuellement l'interface WebParts B.

public interface IWebPartB
{
    string webPartAValue { get; }
    string webPartBValue { get; }
}

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top