Domanda

ASP.NET AJAX ModalPopupExtender ha OnCancelScript E OnOkScript proprietà, ma non sembra avere un file OnShowScript proprietà.Vorrei specificare una funzione JavaScript da eseguire ogni volta che viene visualizzato il popup.

Nelle situazioni passate, ho impostato il file TargetControlID a un controllo fittizio e fornisco il mio controllo che prima esegue del codice JS e quindi utilizza i metodi JS per mostrare il popup.Ma in questo caso, sto mostrando il popup sia dal codice lato client che da quello server.

Qualcuno conosce un modo per farlo?

A proposito, ne avevo bisogno perché ho una casella di testo nel modale che voglio creare un editor TinyMCE.Ma lo script di inizializzazione TinyMCE non funziona su caselle di testo invisibili, quindi ho dovuto trovare un modo per eseguirlo nel momento in cui è stata mostrata la modale

È stato utile?

Soluzione

hmmm...Io sono abbastanza sicuro che c'è un evento mostrato per l'MPE...questo non mi passa per la testa, ma penso che tu possa aggiungere un gestore di eventi all'evento mostrato su page_load

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

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

Non sono sicuro però che questo ti aiuterà a chiamarlo dal lato server

Altri suggerimenti

Ecco un modo semplice per farlo nel markup:

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

Dovresti usare il ID comportamento valore mpeBID del tuo ModalPopupExtender.

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

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

Se stai utilizzando un pulsante, un collegamento ipertestuale o qualcosa del genere per attivare la visualizzazione del popup, potresti anche aggiungere un gestore aggiuntivo all'evento onClick del trigger che dovrebbe comunque attivare il popup modale ed eseguire javascript allo stesso tempo?

ModalPopupExtender modifica il pulsante/collegamento ipertestuale che gli hai indicato come elemento "trigger".Lo script onclick che aggiungo si attiva prima che venga mostrato il popup.Voglio che lo script venga attivato dopo la visualizzazione del popup.

Inoltre, mi lascia ancora il problema di quando mostro il modale dal lato server.

TinyMce lavora su Invisible TextBox se lo nascondi con CSS (display: nessuno;) si fa un evento "onClick" su TargetControlid, per initymce, se si utilizza anche un updatepanel

Per due forme modali:

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();
}

Lato server:sotto

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();
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top