52 votes

ASP.Net résumé de validation page de causes de sauter de haut

J'ai un formulaire simple avec un peu de champ obligatoire validateurs et un récapitulatif de la validation du contrôle. Lorsque je soumets le formulaire, le client, la validation sera la cause de la forme de sauter vers le haut de la page. Si je supprime le récapitulatif de la validation, la page ne bouge pas.

Heres un exemple rapide (pardon pour les sauts de ligne):

<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
<asp:TextBox ID="test" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="testrequired" runat="server" ControlToValidate="test">*</asp:RequiredFieldValidator>
<asp:ValidationSummary ID="summary" runat="server" />
<asp:Button ID="submit" runat="server" Text="submit" />

J'ai essayé de réglage SetFocusOnError="true" dans le champ du programme de validation et d' MaintainScrollPositionOnPostback="true" pour le fou rire - même si ce n'est pas une publication, sans aucune chance. Est-il une solution connue à ce problème?

EDIT:

J'ai trouvé le problème dans le js généré par WebResource.axd. Semble se réduire à une seule ligne dans l' ValidationSummaryOnSubmit() fonction.

line 534: window.scrollTo(0,0);

Toutes les idées sur la façon de supprimer ou de les contourner cela?

EDIT2:

Travail rapide autour pour le moment:

  • ensemble EnableClientScript="false" pour tous les contrôles de validation (désactivation de la validation du client)
  • ensemble MaintainScrollPositionOnPostback="true" dans la directive de Page

Toujours l'espoir pour un client, à côté de la solution...

EDIT3:

Il semble une meilleure solution à ce problème est de simplement remplacer l' window.scrollTo() fonction de sorte qu'il ne fait rien lorsqu'il est appelé par le script de validation:

<script type="text/javascript">
    window.scrollTo = function() { }
</script>

L'ajout de la au-dessus de n'importe où sur la page des feuilles de la validation du client dans le tact, mais désactive l' window.scrollTo() méthode tout au long de la page

43voto

Adam Points 1013

Deux solutions de contournement possibles:

Désactiver la validation du client et de sauter à la position correcte sur le post de retour:

* set EnableClientScript="false" for all validation controls (disabling client validation)
* set MaintainScrollPositionOnPostback="true" in Page directive

Désactiver la fonction scrollTo en javascript:

<script type="text/javascript">
    window.scrollTo = function() { }
</script>

18voto

cleek Points 693

C'est un bug connu, documenté sur Microsoft Connect. Le problème a la base pour le meilleur travail autour de:

var ValidationSummaryOnSubmitOrig = ValidationSummaryOnSubmit;
var ValidationSummaryOnSubmit = function() {
    var scrollToOrig = window.scrollTo;
    window.scrollTo = function() { };
    var retVal = ValidationSummaryOnSubmitOrig();
    window.scrollTo = scrollToOrig;
    return retVal;
}

11voto

Diskdrive Points 2594

Au lieu de

<script type="text/javascript">
    window.scrollTo = function() { return true; }
</script>

ce qui serait sans discernement remplacer la fonction ScrollTo pour toutes les publications, j'ai mis la fonction dans mon OnClientClick événement du bouton. Comme ci-dessous.

onClientClick="window.scrollTo = function(x,y) { return true; };"

Vous ne savez pas si c'est la meilleure solution, mais il semble avoir fait le travail pour moi.

5voto

François Points 51

J'utilise ceci: (nécessite jquery et jquery.scrollTo)

D'abord, vous mettez un point d'ancrage avec une classe spécifique au-dessus de votre récapitulatif de la validation, comme suit:

<a class="custom_valsum_anchor" />
<asp:ValidationSummary ID="valSum" runat="server" EnableClientScript="true" />

ensuite inclure ce peu de javascript:

$(document).ready(
        function () {
            var $valSum = $(".custom_valsum_anchor");
            if ($valSum.size() > 0) {
                var backup_ValidationSummaryOnSubmit = ValidationSummaryOnSubmit;
                ValidationSummaryOnSubmit = function (validationGroup) {
                    var backup_ScrollTo = window.scrollTo;
                    window.scrollTo = function () { };
                    backup_ValidationSummaryOnSubmit(validationGroup);
                    window.scrollTo = backup_ScrollTo;
                    setTimeout(function () { $("body").scrollTo($valSum); }, 1);
                };
            }
        }

);

Fondamentalement, il remplace, au besoin, l' ValidationSummaryOnSubmit fonction avec une version qui désactive temporairement window.scrollTo et passe à l'ancre. Il ne devrait pas être difficile à modifier de sorte qu'il n'utilise pas jquery.

0voto

AndyG Points 3298

La page va sauter à l'endroit où votre récapitulatif de la validation. Si vous souhaitez séjourner près de la bas, déplacez le récapitulatif de la validation près du bouton "soumettre".

EDIT, vous pouvez également essayer de tourner le récapitulatif de la validation du off.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X