0

J'ai un contrôle utilisateur qui contient un gridview et un ModalPopupExtender (MPE). J'utilise le MPE pour forcer les décisions de l'utilisateur après certaines ItemCommands de la grille en utilisant la méthode Show() côté serveur. L'affichage de la fenêtre contextuelle et l'exécution de publications ou de scripts côté client à exécuter à partir de la fenêtre contextuelle fonctionnent tous les deux à merveille. Le problème est que je n'ai aucun contrôle sur l'endroit où la mise au point retentit lorsque le MPE s'affiche. Focus semble atterrir dans le popup, mais pas sur un contrôle particulier. Un seul onglet déplace le focus sur le contrôle prévu, mais je ne peux pas forcer le focus directement. Pour autant que je sache, l'émission et les événements ne se déclenchent jamais du côté client.ModalPopUpExtender affiché à partir du serveur: Contrôle du focus

J'ai essayé d'utiliser Focus() et SetFocus() dans les événements preRender pour la page, le contrôle utilisateur, MPE, le panneau contextuel et le bouton. Aucun ne donne le bon résultat. En fait, appeler le bouton sur ces événements, ou n'importe où ailleurs, a tendance à entraîner une mise au point en dehors de la fenêtre contextuelle, de sorte qu'aucune quantité d'onglets ne sera remise en mémoire là où elle appartient.

Quelqu'un at-il de la chance de contrôler le focus dans une situation similaire?

Répondre

4

Je me suis heurté à cela trop longtemps et, après l'avoir manipulé, j'ai fini par enregistrer un simple javascript pour exécuter après la publication pour envoyer le focus au contrôle désiré.

ScriptManager.RegisterStartupScript(
    typeof(MyPage), 
    "FocusScript", 
    "document.getElementById('" + TextBoxInMPE.ClientID.ToString() + "').focus()", 
    true); 
+0

+1. J'ai aussi fini par utiliser ce genre d'approche. – Juri

+0

Cela ne fonctionnait pas correctement pour moi jusqu'à ce que je l'entoure avec 'setTimeout (function() {...}, 1);' – Brian

Questions connexes