IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

RegisterStartupScript et accès à l'ID des controles


Sujet :

ASP.NET

  1. #1
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2008
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2008
    Messages : 138
    Par défaut RegisterStartupScript et accès à l'ID des controles
    Bonjour.

    Voilà, mon problème est lié à l'exécution d'un script Javascript depuis un code Behind. J'ai donc utilisé RegisterStartupScript.

    Mes WebForms sont organisées de la sorte :
    J'ai un UpdatePanel contenant une textBox et un Timer qui à chaque Tick agit sur d'autres controles.
    Ainsi, à chaque Tick, ma TextBox perd le focus, ce qui est gênant. Donc, quand j'ai terminé mon traitement, à la fin de la méthode évènement Tick, je rend le focus à ma TextBox. Or bien évidemment, le curseur se retrouve en première position. Je souhaite donc le remettre à la fin du contenu de la TextBox. D'où le script Javascript que je souhaite exécuter de façon à remettre le curseur à la fin (problème déjà traité dans ce forum).

    Ainsi, après avoir rendu le focus à ma TextBox, j'exécute un script Javascript envoyé au client grâce au RegisterStartupScript.

    Voici la méthode Tick du timer écrite dans le fichier.aspx.cs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    //this function is called at each tick of the timer
        //it checks if the text written in the texBox changed, and
        //if it does, it looks for suggested sentences which contain
        //the words written in the textBox.
        //If at least one sentence exists, it displays the suggestedBox
        //containing this/these sentences for suggesting
        protected void Timer1_Tick1(object sender, EventArgs e)
        {
           string script = "SetCursorToTextEnd(" + txtBox.ID + ");";
     
           //.....................................................
           //Traitements relatifs aux autres contoles
          //.....................................................
     
          //On rend le focus a la textBox et on replace le curseur
          txtBox.Focus();
          ScriptManager.RegisterStartupScript(this, GetType(), "placeCursor",
          script, true);            
       }

    Résultat, ça fonctionne sous Firefox, mais sous IE et Opera, le curseur n'est pas replacé. La console d'erreur m'indique ce message :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    name : ReferenceError
    message : Statement on line 1: Undefined variable: txtBox
    Backtrace : SetCursorToTextEnd(txtBox);
    Semblerait que l'ID ne soit pas reconnu (alors que l'ID de ma textBox est bien 'txtBox').
    J'avais pensé que c'était peut-être lié à mes paramètres lors de l'appel de RegisterStartupScript. Je mets 'this' en premier paramètre, alors que le controle textBox est déclaré dans le fichier .aspx...sans trop de certitude ...

    Merci d'avance.

  2. #2
    Membre Expert Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Par défaut
    étrange que cela fonctionne sous firefox .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string script = "SetCursorToTextEnd(" + txtBox.ID + ");";
    SetCursorToTextEnd est utilise cote client. donc il faut lui indiquer l'id generé coté client :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string script = "SetCursorToTextEnd(" + txtBox.ClientID+ ");";
    Essaies comme ca, je pense que cela vient de lá...

    Bon code à toi,

  3. #3
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2008
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2008
    Messages : 138
    Par défaut
    Merci pour ta reponse.
    En effet je ne me suis pas mefie des ID cotes clients et serveur.
    Malheureusement, cela ne marche toujours pas et j'obtiens la meme erreur. Semblerait que le controle txtBox ne soit pas connu cote client...
    C'est etrange.

    Je precise que ma textBox est dans un UpdatePanel, je ne sais pas si ca influe sur la perception des controles cotes client.

Discussions similaires

  1. [C#] Liste des controles
    Par royrremi dans le forum ASP.NET
    Réponses: 7
    Dernier message: 26/08/2004, 16h31
  2. [VBA-E] Est il possible de creer dynamiquement des controles en VBA
    Par bbkenny dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 13/08/2004, 20h04
  3. Comment peut on integer des controles dans un prog opengl
    Par franck31400 dans le forum OpenGL
    Réponses: 2
    Dernier message: 28/04/2004, 09h06
  4. [VB.Net] Faire du JS sur des contrôles côté serveur
    Par TagadaTsoin dans le forum ASP.NET
    Réponses: 4
    Dernier message: 03/11/2003, 15h51
  5. [VB6] Comment boucler sur des controls d'un form ?
    Par lankviller dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 27/01/2003, 16h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo