2011-06-27 3 views
2

Sur mon formulaire asp.net, je voudrais désactiver le bouton soumettre chaque fois que ses valideurs échouent, c'est-à-dire Page_isValid = false -et le réactiver par la suite. Je peux le faire en répondant à l'événement onchange de chaque contrôle et test pour Page_isValid, mais je préfère répondre au changement de la variable elle-même, ou à l'exécution de la fonction qui fait le changement.Appelez la fonction javascript lorsque Page_isValid change?

De mes recherches à ce jour, voici ce que j'ai concocté:

Sys.Application.add_load(AddValidatorHandlers); 

function AddValidatorHandlers() { 
    var validatorList; 
    try { validatorList = Page_Validators; } catch (err) { } 
    if (validatorList) { 
     for (i in validatorList) { 
      validatorList[i].onpropertychange = function() { "MY CODE GOES HERE" }; 
     } 
    } 
} 

Il fonctionne, mais pas très efficace. Je dois parcourir tous les validateurs, et ma fonction se déclenche toujours plusieurs fois de suite.

Y at-il un moyen que je peux simplement (a) répondre à l'altération de cette variable Page_isValid? ou (b) obtenir une liste de groupes de validation plutôt que les validateurs individuels?

Merci!

+0

btw, le try/catch impair est parce que mes validateurs sont dans un contrôle GridView, et quand ce n'est pas en mode Edit, demander la variable Page_Validators provoque une erreur. S'il y a une meilleure façon de le faire - et j'en suis sûr - j'aimerais l'entendre. –

Répondre

1

Pour ces types de situations, j'aime toujours mettre mes valideurs à côté du code réel qui modifie ce que je vérifie.

Dans votre cas, chaque fois que vous modifiez votre variable Page_isValid, exécutez une logique qui vérifie si elle a modifié les valeurs par rapport à ce qu'elle était précédemment. Si c'est le cas, vérifiez si elle est maintenant Vrai ou Faux, et désactivez ou activez vos éléments de page appropriés.

Si vous avez besoin d'accéder à plusieurs éléments de page, vous pouvez créer une fonction "updatePageElementsViaValidator" et l'appeler avec true ou false comme paramètre en utilisant la même logique; De cette façon, vous pouvez activer ou désactiver des blocs entiers de votre page avec un seul appel de fonction.

Cette logique peut être modifiée en fonction de vos préférences personnelles, mais le point principal est qu'il est beaucoup plus facile de suivre l'évolution des valeurs variables à l'instance que vous les modifiez par opposition au moment où vous avez besoin d'y accéder.

Questions connexes