Mode édition dans une WebPart


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.

Quand nous passons en mode édition les 2 chaines sont affichées.

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 !

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 »

L’astuce pour que cela fonctionne sur les « team site » consiste à récupérer la valeur via le WebPartManager de la page courante. Pour cela modifions notre code pour qu’il ressemble à ceci.


protected override void CreateChildControls()
{
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.

Christopher.

Article initialement posté le 02/06/2010 sur Areaprog

Cet article, publié dans SharePoint 2007, est tagué , . Ajoutez ce permalien à vos favoris.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s