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.