Je travaille avec l'addition des scores des utilisateurs en fonction de leurs vérifications dans une CheckBoxList. Chaque fois qu'un utilisateur coche une case, une valeur, X
, est ajoutée à la note globale. Lorsqu'un utilisateur désélectionne une case, une valeur, X
, est soustraite du score global. Pas de problèmes ici.
Le problème que je rencontre est que l'utilisation de l'option AutoPostback dans les propriétés CheckBoxList force la page à se recharger au lieu de rester où l'utilisateur se trouvait, ce qui signifie qu'il doit continuer à faire défiler l'écran après chaque vérification/désélection. Est-ce qu'il y a un moyen d'éviter cela?
Bien sûr, le meilleur moyen est d’utiliser un appel Ajax à ce sujet. La page n'est pas déplacée du tout et les données sont simplement mises à jour. Le panneau Update est une solution simple et rapide pour démarrer. Ce n'est pas une solution optimale, mais si vous avez une page simple, c'est une très bonne solution.
Une deuxième solution consiste à utiliser l'ancre #. Vous définissez le point sur lequel vous souhaitez qu'il apparaisse:
<a name="PointA"></a>
Et vous appelez la page en utilisant cette ancre en tant que page.aspx#PointA
.
Une troisième solution consiste à utiliser le code JavaScript interne de ASP.NET. Sur la déclaration de la page (première ligne en haut) <%@ Page MaintainScrollPositionOnPostback="true" %>
.
Ou sur le web.config pour affecter toutes les pages, <pages maintainScrollPositionOnPostBack="true" />
.
Ou par programme System.Web.UI.Page.MaintainScrollPositionOnPostBack = true;
pour l'ouvrir et le fermer à la demande.
Avec seulement deux lignes de code jQuery, vous pouvez créer une animation Nice sur le point que vous souhaitez déplacer après la publication:
var WhereToMove = jQuery("#PointA").position().top;
jQuery("html,body").animate({scrollTop: WhereToMove }, 1000);
Et vous déplacez la page vers cet élément:
<a id="PointA" name="PointA"></a>
Et enfin, vous pouvez utiliser le code JavaScript personnalisé pour faire la même chose. Il existe de nombreux exemples sur Internet à ce sujet: https://www.google.com/?q=asp.net+remain+position
Les deux meilleurs moyens d'empêcher le défilement des pages après la publication sont: Mettez ceci dans le fichier web.config.
1) Pages maintenanceScrollPositionOnPostBack = "true"
Beaucoup de gens ont demandé où est le lieu exact pour mettre cette ligne. Donc le lieu exact pour mettre cette ligne est
<system.web>
<pages maintainScrollPositionOnPostBack="true">
</system.web>
Remarque: Ceci s’applique à l’ensemble de la solution, car il empêche chaque défilement de formulaire
2) La seconde façon d'y parvenir est de placer cette ligne en haut de fichier aspx
MaintainScrollPositionOnPostback = true
Comme ça
<%@ Page MaintainScrollPositionOnPostback=true Language="C#" AutoEventWireup="true" CodeBehind="xx.aspx.cs" Inherits="xx.Global" %>
Remarque: Ceci s'appliquera sur le formulaire spécifique que vous voulez éviter.
Je peux penser à trois façons:
Sur la page dans laquelle le défilement doit être désactivé, définissez l'attribut MaintainScrollPositionOnPostback
dans la directive Page ("<% @ page ....>") sur true, c'est-à-dire que <%@ Page MaintainScrollPositionOnPostback=true ...other settings... >
doit apparaître en haut de la page aspx.
Pour toutes les pages du site Web, ajoutez la ligne suivante dans web.config: <pages MaintainScrollPositionOnPostback=true>
Incorporer les requêtes AJAX
Lorsque vous souhaitez arrêter le défilement et l'actualisation de la page MaintainScrollPositionOnPostback = "true" tag est l'élément le plus important.
Mettez cette ligne dans le fichier de configuration Web:
<pages maintainScrollPositionOnPostBack="true">
Les balises HTML peuvent être référencées par programme dans .NET grâce à la balise runat.
Donnez simplement à la balise body un runat = "server" dans le code HTML et un id = "body" ou tout ce que vous voulez référencer en code (j'utiliserai body
pour l'exemple).
Ensuite, vous pouvez ajouter/modifier les attributs de la balise dans le code comme suit:
Body.Attributes.Add("scroll", "no")
Mettez le code au chargement de la page.