Mode édition dans une WebPart

Comment détecter le type d'affichage courant pendant l'exécution du code

06/02/2010 2 031 lectures 3/5 (2 votes) Christopher Clement Sébastien Sougnez

La structure interne ainsi que le design d'AreaProg ont récemment été modifiés.
Suite à cela, le format de certains articles a été perturbé. Le problème est connu et en cours de résolution. Merci de votre compréhension.

Il peut parfois être utile de savoir si l'on se trouve sur la vue édition d'une WebPart , que cela soit pour afficher des infos supplémentaires ou autre. J’ai tenu à faire ce petit tuto parce qu’il constitue une des différences qui apparaissent suivant que l’on développe pour un site de type publication ou non. Travaillant principalement avec des sites de publications j’ai pour habitude de faire le test avec le bout de code suivant.
if (SPContext.Current.FormContext.FormMode == SPControlMode.Edit)
Pour exemple voici le code d’une webpart contenant 2 chaines de caractères, une à afficher tout le temps et une à n'afficher qu’en mode édition.

protected override void CreateChildControls() 
{
            string contenuPasSecret = "Je m'appelle Christopher.";
            string contenuSecret = "J'ai 26 ans.";
            Controls.Add(new LiteralControl(contenuPasSecret));

            if (SPContext.Current.FormContext.FormMode == SPControlMode.Edit)
                Controls.Add(new LiteralControl(contenuSecret));        
}
Comme vous pouvez le constater sur la capture qui suit, seule la première chaine de caractères est affichée.
Image
Quand nous passons en mode édition les 2 chaines sont affichées.
Image
Le souci c’est que lorsque j’ai voulu utiliser cette WebPart sur un « Team site » j’ai eu la surprise de voir qu’en mode édition, une seule chaine de caractère s’affichait !
Image
Après un petit coup de debug j’ai vu que l’erreur venait de la valeur récupérée par le SPContext.Current.FormContext.FormMode , au lieu de me renvoyer « Edit » il me renvoyait « Invalid »
Image
L’astuce pour que cela fonctionne sur les « team site » consiste a récupérer la valeur via le WebPartManager de la page courante. Pour cela modifions notre code pour qu’il ressemble à ceci.
            WebPartManager wpm = WebPartManager.GetCurrentWebPartManager(Page);

            string contenuPasSecret = "Je m'appelle Christopher.";
            string contenuSecret = "J'ai 26 ans.";
            Controls.Add(new LiteralControl(contenuPasSecret));

            if ((SPContext.Current.FormContext.FormMode == SPControlMode.Edit)|| (wpm.DisplayMode.Name.Equals("Design")))
                Controls.Add(new LiteralControl(contenuSecret));
Maintenant plus de problèmes, notre chaine de caractères « privée » est affichée seulement en édition et sur les 2 types de site.

Noter

Veuillez vous identifier ou vous inscrire pour donner une note à cet article.

Commentaires / Questions

Aucun commentaire.

Veuillez vous identifier ou vous inscrire pour réagir à cet article.

Avatar

Christopher Clement

Envoyer un mail Site web LinkedIn Rédacteur

350 points

Avatar

Sébastien Sougnez

Envoyer un mail Site web Windows live messenger LinkedIn Twitter Facebook MVP Administrateur

25754 points