Как указать javascript для запуска при отображении ModalPopupExtender

ASP.NET AJAX ModalPopupExtender имеет OnCancelScript и OnOkScript свойства, но это , кажется, не имеют OnShowScript собственности. Я хотел бы указать функцию javascript, которая будет запускаться каждый раз при отображении всплывающего окна.

В прошлых ситуациях я установил TargetControlID фиктивный элемент управления и предоставил свой собственный элемент управления, который сначала выполняет некоторый код JS, а затем использует методы JS для отображения всплывающего окна. Но в этом случае я показываю всплывающее окно как на стороне клиента, так и на стороне сервера.

Кто-нибудь знает, как это сделать?

Кстати, мне это было нужно, потому что у меня есть текстовое поле в модальном окне, которое я хочу сделать редактором TinyMCE. Но сценарий инициализации TinyMCE не работает с невидимыми текстовыми полями, поэтому мне пришлось найти способ запустить его во время отображения модального окна.

Ответов (8)

Решение

хммм ... я почти уверен, что есть показанное событие для MPE ... это не в моей голове, но я думаю, что вы можете добавить обработчик события к показанному событию на page_load

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

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

Я не уверен, что это поможет вам вызвать его со стороны сервера, хотя

ModalPopupExtender изменяет кнопку / гиперссылку, которая, по вашему мнению, является элементом «триггера». В скрипт onclick я добавляю триггеры до того, как появится всплывающее окно. Я хочу, чтобы скрипт запускался после отображения всплывающего окна.

Кроме того, у меня все еще остается проблема, когда я показываю модальное окно со стороны сервера.

Вот простой способ сделать это в разметке:

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

TinyMCE работает с невидимым текстовым полем, если вы скрываете его с помощью css (display: none;). Вы создаете событие «onclick» для TargetControlID, для инициализации TinyMCE, если вы также используете панель обновления

Для двух модальных форм:

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

Сторона сервера: поведение

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

Если вы используете кнопку или гиперссылку или что-то еще, чтобы вызвать всплывающее окно, не могли бы вы также добавить дополнительный обработчик к событию onClick триггера, который по-прежнему должен запускать модальное всплывающее окно и одновременно запускать javascript?

Вы должны использовать значение BehaviorID mpeBID вашего ModalPopupExtender.

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

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