Comment enregistrer les variables par session utilisateur et par page
-
10-12-2019 - |
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.
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; }
}