juin
2008
Il existe une propriété qui n’est pas très connue et pourtant bien pratique pour repositionner le scroll d’une page à l’endroit où elle était avant un postback.
Il s’agit de la propriété MaintainScrollPositionOnPostback.
Imaginons une page avec beaucoup de contenu …
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<asp:Label runat="server" Text="<%#DateTime.Now.ToShortTimeString() %>" /><br/>
<p>
ici mettre plein de trucs histoire d'avoir une barre de défilement
</p>
<br />
<br />
<asp:Button runat="server" Text="Valider" />
</form>
</body>
</html>
L’utilisation de la propriété MaintainScrollPositionOnPostback (positionnée à true) sur la page permet de rajouter automatiquement du javascript qui se chargera de re-positionner correctement le scroll à l’endroit où on l’a laissé.
Dans la page, ASP.NET ajoute ce code javascript là :
theForm.submit = WebForm_SaveScrollPositionSubmit;
theForm.oldOnSubmit = theForm.onsubmit;
theForm.onsubmit = WebForm_SaveScrollPositionOnSubmit;
theForm.oldOnLoad = window.onload;
window.onload = WebForm_RestoreScrollPosition;
sachant qu’est ajouté en ressource un fichier javascript qui contient entre autre les fonctions suivantes :
{
if (__nonMSDOMBrowser)
{
theForm.elements['__SCROLLPOSITIONY'].value = window.pageYOffset;
theForm.elements['__SCROLLPOSITIONX'].value = window.pageXOffset;
}
else
{
theForm.__SCROLLPOSITIONX.value = WebForm_GetScrollX();
theForm.__SCROLLPOSITIONY.value = WebForm_GetScrollY();
}
if ((typeof(this.oldSubmit) != "undefined") && (this.oldSubmit != null))
{
return this.oldSubmit();
}
return true;
}
function WebForm_SaveScrollPositionOnSubmit()
{
theForm.__SCROLLPOSITIONX.value = WebForm_GetScrollX();
theForm.__SCROLLPOSITIONY.value = WebForm_GetScrollY();
if ((typeof(this.oldOnSubmit) != "undefined") && (this.oldOnSubmit != null))
{
return this.oldOnSubmit();
}
return true;
}
function WebForm_RestoreScrollPosition()
{
if (__nonMSDOMBrowser)
{
window.scrollTo(theForm.elements['__SCROLLPOSITIONX'].value, theForm.elements['__SCROLLPOSITIONY'].value);
}
else
{
window.scrollTo(theForm.__SCROLLPOSITIONX.value, theForm.__SCROLLPOSITIONY.value);
}
if ((typeof(theForm.oldOnLoad) != "undefined") && (theForm.oldOnLoad != null))
{
return theForm.oldOnLoad();
}
return true;
}
function WebForm_GetScrollX()
{
if (__nonMSDOMBrowser)
{
return window.pageXOffset;
}
else
{
if (document.documentElement && document.documentElement.scrollLeft)
{
return document.documentElement.scrollLeft;
}
else if (document.body)
{
return document.body.scrollLeft;
}
}
return 0;
}
function WebForm_GetScrollY()
{
if (__nonMSDOMBrowser)
{
return window.pageYOffset;
}
else
{
if (document.documentElement && document.documentElement.scrollTop)
{
return document.documentElement.scrollTop;
}
else if (document.body)
{
return document.body.scrollTop;
}
}
return 0;
}
avec au préalable :
var __nonMSDOMBrowser = (window.navigator.appName.toLowerCase().indexOf('explorer') == -1);
La propriété MaintainScrollPositionOnPostback peut etre précisée individuellement sur chaque page, comme on l’a vu, ou bien pour toutes les pages en modifiant le web.config
<pages maintainScrollPositionOnPostBack="True">
à placer dans la section
<system.web>
Commentaires récents
- [Tests] Arrange Act Assert, une traduction ? dans
- [UnitTest][C#] Tester une méthode privée dans
- Récupérer une valeur d’un contrôle depuis une autre Form / inclusions croisées et déclaration anticipée dans
- Tutoriel : Utiliser la ListBox et l’Isolated Storage dans vos applications Windows Phone 7 avec Silverlight dans
- Tutoriel : Utiliser la ListBox et l’Isolated Storage dans vos applications Windows Phone 7 avec Silverlight dans
Archives
- janvier 2013
- avril 2012
- janvier 2012
- juin 2011
- janvier 2011
- décembre 2010
- novembre 2010
- septembre 2010
- juin 2010
- mars 2010
- février 2010
- janvier 2010
- décembre 2009
- novembre 2009
- octobre 2009
- septembre 2009
- août 2009
- juillet 2009
- mai 2009
- avril 2009
- mars 2009
- janvier 2009
- décembre 2008
- novembre 2008
- octobre 2008
- septembre 2008
- août 2008
- juillet 2008
- juin 2008
- mai 2008
- avril 2008
- mars 2008
- février 2008
- janvier 2008
- décembre 2007
- novembre 2007
- octobre 2007
- septembre 2007
- août 2007
- juillet 2007
- juin 2007
- mai 2007