0

Ich habe ein Benutzersteuerelement, das eine Gridview und einen ModalPopupExtender (MPE) enthält. Ich verwende das MPE, um Benutzerentscheidungen nach bestimmten ItemCommands aus der Gridview mit der serverseitigen Show() -Methode zu erzwingen. Das Popup zu zeigen und Postbacks oder clientseitige Scripts zur Ausführung aus dem Popup zu bekommen, funktioniert wunderbar.ModalPopUpExtender von serverseitig angezeigt: Fokus steuern

Das Problem ist, dass ich keine Kontrolle darüber habe, wo der Fokus landet, wenn der MPE angezeigt wird. Der Fokus scheint innerhalb des Popups zu liegen, aber nicht auf einem bestimmten Steuerelement. Eine einzelne Registerkarte verschiebt den Fokus auf das gewünschte Steuerelement, aber ich kann den Fokus dort nicht direkt erzwingen.

Soweit ich das beurteilen kann, feuern die Show- und Show-Events niemals auf der Client-Seite.

Ich habe versucht, mit Focus() und SetFocus() in PreRender-Ereignisse für die Seite, Benutzersteuerung, MPE, Popup-Panel und Schaltfläche. Keine ergibt das richtige Ergebnis. Wenn Sie den Fokus auf die Schaltfläche in diesen Ereignissen oder an einem anderen Ort richten, wird der Fokus außerhalb des Popup-Fensters landen, so dass keine Anzahl von Tabs den Fokus dorthin zurückführen kann, wo sie hingehört.

Hat jemand Glück, den Fokus in einer ähnlichen Situation zu kontrollieren?

Antwort

4

Ich lief in diese eine Weile zurück und nachdem ich damit herumgespielt habe, habe ich einfach ein einfaches Javascript registriert, um nach dem Postback zu laufen, um den Fokus auf das gewünschte Steuerelement zu setzen.

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

+1. Ich habe auch diese Art von Ansatz verwendet. – Juri

+0

Das hat bei mir nicht funktioniert, bis ich es mit 'setTimeout (function() {...}, 1);' umgeben habe – Brian

Verwandte Themen