Как указать JavaScript для запуска при показе ModalPopupExtender

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

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

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

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

7.08.2008 23:37:30
Они показывают вам, как поднять событие вручную, а не как его прикрепить: asp.net/ajaxlibrary/act_modalpopup.ashx ... бесценно
rdmptn 14.05.2014 14:33:49
8 ОТВЕТОВ
РЕШЕНИЕ

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

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

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

я не уверен, что если это поможет вам позвонить со стороны сервера, то

29
8.08.2008 00:03:41
add_shown () просто сэкономил мне кучу усилий и работал отлично !!
Chris Porter 5.04.2011 20:03:49
Потрясающие! Я также должен был добавить Sys.Application.add_load(pageLoad);к своей странице, чтобы заставить это уволитьpageLoad()
Jorin 25.10.2011 22:20:50
Просто чтобы добавить к @Jorin: я добавил свой javascript через среду выполнения, и add_shown будет работать, когда будет выполнена частичная обратная передача (с помощью панели обновления), однако, НЕ будет работать, когда была сделана полная обратная передача (из-за динамических элементов управления, запускающих MPE). быть показано). Добавление Sys.Application.add_load (pageLoad); линия как раз перед тем, как мой javascript заставил его работать даже при полной обратной передаче страницы.
yougotiger 29.11.2011 22:47:58
Вам также может понадобиться некоторое время ожидания в показанном обработчике, кажется, некоторая инициализация в самом расширителе всплывающих окон происходит в течение времени ожидания. Мне это нужно для правильного расчета размера.
rdmptn 14.05.2014 14:35:01

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

2
7.08.2008 23:44:27
Вы можете показать всплывающее окно из JS-кода на стороне клиента, поэтому без обратной передачи. Я думаю, вы могли бы запустить дополнительный код JS таким образом.
Captain Sensible 28.06.2012 08:23:58

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

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

2
7.08.2008 23:53:48

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

2
27.01.2010 00:34:17

Вам следует использовать значение BehaviorIDmpeBID вашего ModalPopupExtender.

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

function HideMediaPlayer() {
    var divMovie = $get('<%=divMovie.ClientID%>');
    divMovie.style.display = "none";
}
11
5.04.2018 17:37:24

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

<ajaxToolkit:ModalPopupExtender 
                ID="ModalPopupExtender2" runat="server" 
                TargetControlID="lnk_OpenGame" 
                PopupControlID="Panel1" 
                BehaviorID="SilverPracticeBehaviorID"  >
            <Animations>
                <OnShown>
                     <ScriptAction Script="InitializeGame();" />  
                </OnShown>
            </Animations>                
</ajaxToolkit:ModalPopupExtender>
15
2.03.2012 07:24:20
Я получаю следующую ошибку: «Анимация на TargetControlID =« hiddenButtonPopup1 »использует свойство AjaxControlToolkit.ModalPopupExtender.OnShown, которое не существует или не может быть установлено». hiddenButtonPopup1 - это скрытая кнопка, которая назначена TargetControlID.
Captain Sensible 28.06.2012 08:26:48
Прекрасно работает для меня, и мне нравится решение только для разметки, которое показывает, как мой JS также находится в разметке
dlchambers 13.07.2018 12:28:00
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();
}
2
7.02.2016 17:53:11
Как это лучше, чем ранее принятый ответ выше?
jszobody 10.04.2013 01:17:14

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

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);
}
2
7.02.2016 17:52:32