Question

L'ASP.NET AJAX ModalPopupExtender a OnCancelScript et OnOkScript propriétés, mais il ne semble pas avoir de OnShowScript propriété.Je voudrais spécifier une fonction javascript à exécuter chaque fois que la fenêtre contextuelle est affichée.

Dans des situations passées, j'ai défini le TargetControlID à un contrôle factice et fournir mon propre contrôle qui fait d'abord du code JS, puis utilise les méthodes JS pour afficher la fenêtre contextuelle.Mais dans ce cas, j'affiche la fenêtre contextuelle du code côté client et côté serveur.

Quelqu'un connaît-il un moyen de procéder?

BTW, j'en avais besoin parce que j'ai une zone de texte dans le modal que je veux créer comme éditeur TinyMCE.Mais le script d'initialisation TinyMCE ne fonctionne pas sur les zones de texte invisibles, j'ai donc dû trouver un moyen de l'exécuter au moment où le modal était affiché

Était-ce utile?

La solution

hmmm...Je suis plutôt sûr qu'il y a un événement affiché pour le MPE...cela me vient à l'esprit, mais je pense que vous pouvez ajouter un gestionnaire d'événements à l'événement affiché sur page_load

function pageLoad()
{
    var popup = $find('ModalPopupClientID');
    popup.add_shown(SetFocus);
}

function SetFocus()
{
    $get('TriggerClientId').focus();
}

Je ne suis pas sûr que cela vous aide à l'appeler du côté serveur.

Autres conseils

Voici une manière simple de le faire en balisage :

<ajaxToolkit:ModalPopupExtender 
                ID="ModalPopupExtender2" runat="server" 
                TargetControlID="lnk_OpenGame" 
                PopupControlID="Panel1" 
                BehaviorID="SilverPracticeBehaviorID"  >
            <Animations>
                <OnShown>
                     <ScriptAction Script="InitializeGame();" />  
                </OnShown>
            </Animations>                
</ajaxToolkit:ModalPopupExtender>

Vous devriez utiliser le ID de comportement valeur mpeBID de votre ModalPopupExtender.

function pageLoad() {
    $find('mpeBID').add_shown(HideMediaPlayer);
}

function HideMediaPlayer() {
    var divMovie = $get('<%=divMovie.ClientID%>');
    divMovie.style.display = "none";
}

Si vous utilisez un bouton, un lien hypertexte ou quelque chose pour déclencher l'affichage de la fenêtre contextuelle, pourriez-vous également ajouter un gestionnaire supplémentaire à l'événement onClick du déclencheur qui devrait toujours déclencher la fenêtre contextuelle modale et exécuter le javascript en même temps ?

Le ModalPopupExtender modifie le bouton/lien hypertexte que vous lui indiquez comme élément « déclencheur ».Le script onclick que j'ajoute déclenche avant que la fenêtre contextuelle ne s'affiche.Je veux que le script se déclenche après l'affichage de la fenêtre contextuelle.

De plus, cela me laisse toujours le problème du moment où j'affiche le modal du côté serveur.

TinyMce fonctionne sur la zone de texte invisible Si vous le cachez avec CSS (affichage: aucun;) Vous créez un événement "onClick" sur TargetControlid, pour init tinyMCE, si vous utilisez également un UpdatePanel

Pour deux formes modales :

var launch = false;
var NameObject = '';

function launchModal(ModalPopupExtender) {
    launch = true;
    NameObject = ModalPopupExtender;
}

function pageLoad() {
    if (launch) {
        var ModalObject = $find(NameObject);
        ModalObject.show();
        ModalObject.add_shown(SetFocus);
                }
} 

function SetFocus() {
    $get('TriggerClientId').focus();
}

Du côté serveur:faire la main

protected void btnNuevo_Click(object sender, EventArgs e)
{
    //Para recuperar el formulario modal desde el lado del sercidor
    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "key", "<script>launchModal('" + ModalPopupExtender_Factura.ID.ToString() + "');</script>", false);
}
var launch = false;

function launchModal() {
    launch = true;
}

function pageLoad() {
    if (launch) {
          var ModalPedimento = $find('ModalPopupExtender_Pedimento');
          ModalPedimento.show();
          ModalPedimento.add_shown(SetFocus);
    }
}

function SetFocus() {
    $get('TriggerClientId').focus();
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top