Vous êtes ici Forums
  |  Connexion
 Forums
HomeHomeForums DNNForums DNNDéveloppementDéveloppement[DNN4] Positionner la page après un post[DNN4] Positionner la page après un post
Précédente
 
Suivante
Nouveau message
12/11/2009 13:14
 

Bonjour à tous,

J'ai un module qui comporte des boutons en haut et lorsque l'on clique sur l'un d'eux, un gridView en pied de page se remplit.

En fait, j'aimerais qu'après un clic, la page se positionne sur le gridview.

J'ai mis une ancre et dans le traitement du clic, j'ai fait:

this.Page.RegisterStartupScript("Startup ", <script language='javascript'>window.location.href='#teteGvDoc';</script>);

Ca pourrait fonctionner, mais DNN a un comportement automatique qui fait qu'après le chargement de la page, il se repositionne automatiquement à l'endroit ou il était lors du clic... Ca fait donc un va et vient.

Comment désactiver ce comportement ?

Ou alors si vous avez une autre méthode.

Merci d'avance.

David.

 
Nouveau message
12/11/2009 15:17
 

Pareil... mais je n'ai pas encore trouvé de solutions... peut-être que l'ami Gilles passera par là !?

David (un autre !)


"Qui ne connait pas l'Histoire ne connait rien".
 
Nouveau message
12/11/2009 18:38
Réponse Acceptée 

Bonjour David,

En programmation, il faut utiliser la classe méconnue CDefault du framewok dnn. Pour positionner l'utilisateur sur un controle, il suffit de passer une référence à celui-ci :

DirectCast(Page, DotNetNuke.Framework.CDefault).ScrollToControl(NomDeTonControle)

J'utilise cette classe dans Store pour modifier dynamiquement les meta tags de la page (Title, Keywords, Description, ...). C'est la seconde utilité de cette classe, elle ne fait rien d'autre mais c'est déjà beaucoup ! ;-)

Voilà, une seule ligne, pas de tag anchor pourquoi faire compliqué ?

Gilles

 
Nouveau message
12/11/2009 18:42
 

Salut (l'autre) David !

Pour ton problème, je suppose que ce n'est pas en programmation ? Donne moi plus d'infos sur ton cas particulier, est-ce avec FnL en XSLT ?

Gilles

 
Nouveau message
13/11/2009 08:13
 

Bonjour Ploum,

Merci pour ta rapidité.

J'ai un souci, il ne veut pas de directCast (ni de CType), pourtant, je suis dans le page_load de mon module.

Le nom 'CType' n'existe pas dans le contexte actuel

J'ai ces bibliotheque là:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using System.Reflection;
using System.Configuration;

using System.IO;

using DotNetNuke;
using DotNetNuke.Common;
using DotNetNuke.Common.Utilities;
using DotNetNuke.Entities.Modules;
using DotNetNuke.Entities.Modules.Actions;
using DotNetNuke.Security;
using DotNetNuke.Services.Exceptions;
using DotNetNuke.Services.FileSystem;
using DotNetNuke.Services.Localization;

De plus, j'émet un doute, car avec mes bricolages, j'arivais à me placer à l'endroit désiré mais DNN me redirigeait aussitôt après en haut de la page... Je pense que ce comportement existera toujours avec ta solution, nan ?

David (le 1er)

 
Nouveau message
13/11/2009 08:39
 

Extra !

J'ai fait ça:

                DotNetNuke.Framework.CDefault cd = new DotNetNuke.Framework.CDefault();
                cd.Page = Page;
                cd.ScrollToControl(lblInfos);

Ca marche du tonnerre ton actuce. ;-)

Merci Ploum !

Ceci dit, je ne m'explique toujours pas pourquoi mon CType (qui est utilisé ailleurs) fait planter mon script.

Et puis, je ne sais pas non plus pourquoi le comportement indésiré de DNN a sauté avec ton code...

 
Nouveau message
13/11/2009 08:50
 

Bin mince... Ton truc ne fonctionne que si on est connecté en Host.

Et encore, il ne faut pas qu'on soit en mode apercu. 0_0

Normal ?

 
Nouveau message
13/11/2009 15:16
 

Salut David,

Désolé, je n'avais pas fait attention que tu programmais en C# ! Donc, une syntaxe valide en C# serait (merci les cast) :

((CDefault)this.Page).ScrollToControl(NomDuControle);

Le doute que tu émet n'est pas fondé. Le comportement '"standard" est dù au fait que par défaut ScrollToControl vaut 0 (zéro), dnn positionne alors la page en haut. Lorsque tu défini le controle sur lequel se positionner dnn fait ce que tu lui demande ! Il n'est pas contrariant. ;-)

Gilles

 
Nouveau message
13/11/2009 15:36
 

[EDIT]

((DotNetNuke.Framework.CDefault)this.Page).ScrollToControl(lblInfos);

[/EDIT]

Super exta génial... Ca fonctionne à merveille... Et pour tout le monde.

Merci Ploum !!!

 
Nouveau message
13/11/2009 15:44
 

Re,

Alors, à mon humble avis, tu utilise Internet Explorer et ton skin ne possède pas de DOCTYPE (ou celui-ci est incomplet ou incorrect). Ceci n'est probablement pas dù à dnn, mais résulte d'un skin qui n'est pas valide W3C. Tu devrais vérifier ton DOCTYPE et valider ton skin avec cet outil. Lorsqu'un skin ne possde pas de DOCTYPE valide, IE passe en mode "Quick" et dégrade le comportement. Parfois, il en résulte des dysfonctionnements. Ce problème est bien connu des webdesigners qui travaillent toujours avec des DOCTYPE valides. Tu devrais faire l'essai avec un dnn 5.1.4 et le skin par défaut qui normalement est valide. Tu peux aussi faire un test avec FireFox, tu devrais avoir un comportement différent car FF n'applique pas les même règles que IE (oeuf course!).

Pour déclarer un DOCTYPE valide pour un skin, il faut un fichier de déclaration NomDuSkin.doctype.xml ! Par exemple, si ton skin possède un ascx nommé Accueil.ascx, tu devrais avoir un fichier Accueil.doctype.xml contenant le code suivant (pour XHTML 1.0 Transitional) :

<SkinDocType>
 <![CDATA[
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

]]>
</SkinDocType>

L'erreur classique d'un DOCTYPE incorrect est d'oublier l'url qui pointe vers la bonne dtd. Evidement, il faut un fichier de déclaration de DOCTYPE par ascx !

Gilles

 
Nouveau message
13/11/2009 15:48
 

Re,

Alors, tu vois quand tu veux ! ;-) Bon il va faloir revoir notre accord à la hausse, maintenant ce n'est plus une coupette mais une bassine !

Gilles

EDIT: Oups, j'ai confondu tes posts avec ceux de ThierryL (qui me doit une coupette). Mais j'accepte les coupettes de tout le monde ! ;-)

Ploum = Ivrogne ? Non, juste un bon vivant ! ;-)

 
Précédente
 
Suivante
HomeHomeForums DNNForums DNNDéveloppementDéveloppement[DNN4] Positionner la page après un post[DNN4] Positionner la page après un post