2016-07-07 2 views
1

J'ai une très longue fiche à remplir. J'ai maintainScrollPositionOnPostBack activé car j'ai plusieurs contrôles qui masquent/show en fonction de l'entrée de l'utilisateur.Asp.net maintainScrollPositionOnPostBack et la validation des formulaires échouent

Étant donné que le formulaire est long, j'aimerais que la page se concentre et fasse défiler jusqu'au premier contrôle qui a provoqué l'échec de la validation, et j'ai mis l'accent sur l'option d'échec de validation activée. Cependant, il semble que maintainScrollPositionOnPostBack remplace cela (le contrôle se concentre mais ne fait pas défiler vers le haut).

Des idées pour des solutions de contournement pour ceci? Tout ce que j'ai essayé jusqu'ici n'a pas fonctionné. C'est un projet de webmestres asp.net.

Répondre

0

Ceci est une bonne question et vraiment difficile à travailler. Mais j'ai réussi à obtenir une version que vous pouvez essayer et peut-être construire. Le paramètre MaintainScrollPositionOnPostback = "true" définit une série d'événements javascript sur l'envoi de formulaire et le chargement de la fenêtre. Ils font comme vous le dites, "écrasent" le focus défini par le validateur.

Donc ce que je ne faisais ajouter une classe CSS commune à tous les validateurs comme ceci:

<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" CssClass="error" ErrorMessage="RequiredFieldValidator" SetFocusOnError="true" 
    EnableClientScript="false" ControlToValidate="TextBox1"></asp:RequiredFieldValidator> 

Et puis j'ajouté un autre à EventListener window.load (noter que nous devons aussi laisser celui qui Asp. net a ajouté que nous ne pouvons pas faire windows.load = function ...):

<script> 
    window.addEventListener("load", function() { 
     var el = document.getElementsByClassName("error"); 
     if (el.length > 0) { 
      window.location.hash = "#" + el[0].id;     
     } 
    });   
</script> 

ici vous pouvez bénéficier de jQuery utiliser pour être en mesure de soutenir d'autres navigateurs, mais addEventListener est pretty well supported.

Le script recherche le message d'erreur et se concentre sur celui-ci par son ID avec l'ancre. Javascript a focus-method mais c'est pour les éléments de formulaire, c'est pourquoi cette solution de contournement.

Espérons que cela aide!

+0

Merci beaucoup pour la réponse! J'ai juste essayé cela, il reconnaît le nombre de contrôles qui ont échoué à la validation. Cependant, 'the window.location.hash =" # "+ el [0] .id;' semble ne rien faire. Je ne suis pas sûr de savoir pourquoi. Je vais continuer à tester et à mettre à jour – mtNewToJava

+0

Hmm cela pourrait-il être l'ordre des load-events, essayez de mettre ce script tout en bas de body-element. – Esko

+0

Oui qui a résolu le problème! J'ai dû mettre le script comme la toute dernière chose sur la page! Je suppose qu'une autre solution possible serait d'utiliser un panneau de mise à jour au lieu de faire des postbacks complets et de garder maintainScrollPositionOnPostBack = "false", pourrait essayer si tard si j'ai un peu de temps. Merci beaucoup pour votre aide. – mtNewToJava