Partage
  • Partager sur Facebook
  • Partager sur Twitter

[ASP.Net]Activer un lien sur saisie d'une textbox

    17 mars 2023 à 10:35:59

    Bonjour,

    Je suis relativement nouveau en ASP.Net (mon employeur me fait apprendre sur le tas), et je rencontre une difficulté.

    Sur une page web, j'ai une textbox (TX_NOSIRET), et un lien (LK_AFFICHER_DETAILS) inactif par défaut.
    Lors de la saisie de TX_NOSIRET:
    Si TX_NOSIRET n'est pas vide, activer le lien.
    Si TX_NOSIRET est vide, désactiver le lien.

    A priori, c'est simple. Je suppose que je doit détecter les frappes clavier avec le contrôle TX_NOSIRET.
    A ma connaissance, le serveur n'est pas capable de détecter les frappe clavier, je suis donc passé par JavaScript (donc coté client).

    Le code coté serveur, cela donne ceci:

    <asp:TextBox ID="TX_NOSIRET" tunat="server"RequireValidation="false" />
    <asp:LinkButton ID="LK_AFFICHER_DETAILS" runat="server" Text="Afficher les details" />
    <script type="text/javascript">
        var input = document.getElementById("<%TX_NOSIRET.UniqueID%>");
        siret.addEventListener("keydown", function(event) {
            var siret = document.getElementById("<%TX_NOSIRET.UniqueID%>");
            var afficherDetails = document.getElementById("<%LK_AFFICHER_DETAILS.UniqueID%>");
            if(siret.value == "") {
                afficherDetails.setAttribute("disabled", "");
            }
            else {
                afficherDetails.removeAttribute("disabled");
            }
        });
    </script>
    Private Sub Page_chargementInitial(ByVal sender As Object, ByVal e As System.EventArg) Handle MyBase.chargementInitial
        LK_AFFICHER_DETAIL.Enabled = False
    End Sub

    Bien sûre, cela ne produit pas le comportement escompté, en effet, coté serveur le lien est désactivé, l'attribut href n'est pas généré.
    Retirer l'attribut disabled ne produit aucun effet (le lien devient actif, mais sans attribut href, il est inutile).

    L'attribut href étant, le cas échéant, généré dynamiquement coté serveur, le code client (JavaScript) n'a aucune idée de la valeur de ce dernier (et c'est normal).
    Existe t'il une solution pour m'en sortir ?

    Je vous remercie pour vos suggestions.

    • Partager sur Facebook
    • Partager sur Twitter
      17 mars 2023 à 12:40:38

      Dans ton code JS, tu peux aussi mettre à jour l'adresse cible de ton lien, si tu sais comment le générer de ce côté.
      Sinon côté serveur, il faut utiliser l'événement TX_NOSIRET_TextChanged pour faire les opérations
      https://learn.microsoft.com/fr-fr/dotnet/api/system.web.ui.webcontrols.textbox.textchanged?view=netframework-4.8

      -
      Edité par umfred 17 mars 2023 à 12:40:46

      • Partager sur Facebook
      • Partager sur Twitter
        17 mars 2023 à 13:10:36

        Le problème, est que je ne connait pas l'URL justement (je pourrais la mettre en dur, mais ce n'est pas propre).

        Et l'évènement TextChanged coté serveur ne détecte pas les frappes au clavier.

        • Partager sur Facebook
        • Partager sur Twitter
          17 mars 2023 à 16:02:30


          Au fait, la coquille sur tunat au lieu de runat sur la 1ère ligne c'est une erreur de copier/coller ?

          -
          Edité par umfred 17 mars 2023 à 16:02:41

          • Partager sur Facebook
          • Partager sur Twitter
            17 mars 2023 à 16:44:54

            Heu ... tu chipottes sur un détail qui n'a rien à voir avec le sujet ...

            J'ai réussi à m'en sortir, d'une part en assignant en dur (faute de mieux) l'attribut href.
            d'autre part en court-circuitant le comportement par défaut qui provoquait un postBack sur la touche entrer:

            <asp:TextBox ID="TX_NOSIRET" runat="server"RequireValidation="false" />
            <asp:LinkButton ID="LK_AFFICHER_DETAILS" runat="server" Text="Afficher les details" />
            <script type="text/javascript">
                var input = document.getElementById("<%TX_NOSIRET.UniqueID%>");
                siret.addEventListener("keyup", function(event) {
                    var siret = document.getElementById("<%TX_NOSIRET.UniqueID%>");
                    var afficherDetails = document.getElementById("<%LK_AFFICHER_DETAILS.UniqueID%>");
                    if(siret.value == "") {
            			afficherDetails.removeAttribute("href");
                        afficherDetails.setAttribute("disabled", "disabled");
                    }
                    else {
            			afficherDetails.setattribute("href", "javascript:WebForm_DoPostBackWithOptions(New WebFormPostBackoptions(\"<%LK_AFFICHER_DETAILS.UniqueID%>\", \"\", true, \"\", \"\", false, true))");
                        afficherDetails.removeAttribute("disabled");
                    }
            		
            		if(event.keyCode == 13) {
            			event.preventDefault();
            		}
                });
            	
            	siret.addEventListener("keyup", function(event) {
            		if(event.keyCode == 13) {
            			event.preventDefault();
            		}
            	});
            </script>
            • Partager sur Facebook
            • Partager sur Twitter

            [ASP.Net]Activer un lien sur saisie d'une textbox

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown