0 votes

JavaScript côté client pour inverser les effets des listes déroulantes lors du deuxième postback.

J'ai du JavaScript pour faire basculer une liste déroulante dans une page ASP.NET, qui est appelée lorsque je clique sur un bouton. J'ai environ 4 à 5 paires liste déroulante/bouton basculant. Chaque bouton bascule la propriété d'activation/désactivation de la liste déroulante associée.

J'enregistre la valeur de la propriété "disabled" d'un champ caché pour suivre l'état "disabled" d'un bouton entre les postbacks, avec le javascript suivant

function disableButton(dropdownID)
{
    var element = document.getElementById(dropdownID); // get the DOM element
    var trackingField = document.getElementById("_tracking" + dropdownID);
    if (element) { 
        trackingField.value = element.disabled; 
//sending the element.disabled instead of "!element.disabled" since we are
//setting dropdownlist.enabled property so is already negated for us
        element.disabled = !element.disabled; // invert the boolean attribute
    }
    return false; // prevent default action
}

HTML

    <input type="hidden" name="_trackingdropdownlist" id="_trackingdropdownlist" value="true" />

Code

 if (Request.Params[_trackingdropdownlist] != null)
            {
              bool val = true;
              bool.TryParse(Request.Params[_trackingdropdownlist], out val);
              dropdownlist.Enabled = val;

            }

Ainsi, l'état de la liste déroulante est maintenu lors du premier aller-retour du postback, mais après cela, toutes les listes déroulantes sont activées. Qu'est-ce qui ne va pas ici ?

*Remarque : la valeur par défaut de la propriété activée sur ces listes déroulantes est false.

0voto

lincolnk Points 7124

Vos éléments cachés ne sont pas des éléments de serveur, et leurs valeurs sont perdues entre les postbacks. lorsque la page est rechargée, les éléments cachés sont recréés avec la valeur "true" que vous spécifiez. lorsque vous vérifiez la valeur de la requête au deuxième postback, tous les éléments cachés qui n'ont pas été modifiés entre le premier et le deuxième postback contiendront true.

en faire des éléments de serveur afin que toute modification apportée soit maintenue dans l'état d'affichage.

0voto

mike Points 11

De plus, pour vous aider à déterminer ce qui est envoyé au serveur lors de chaque retour arrière, vous pouvez utiliser un outil comme FiddlerTool pour suivre les requêtes http. Vous pourrez ainsi voir si l'état de la vue et des champs de formulaire cachés est perdu entre les requêtes.

Par ailleurs, en examinant le code de la fonction "disableButton", on a vraiment l'impression qu'elle fait basculer le bouton, et non qu'elle le désactive en soi (étant donné que element.disabled = !element.disabled). Si vous voulez vraiment désactiver le bouton, vous devriez éviter une logique du type "A = !A", qui basculerait simplement d'un état à l'autre à chaque exécution de l'instruction.

Donc si le câblage est incorrect, alors la réponse de lincolnk vous mettra dans la bonne direction, sinon, je vous suggère de regarder comment votre fonction est écrite qui ne désactiverait le bouton que lors d'un postback sur deux.

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