SimpleModal повреждает Обратные передачи ASP.NET

Для того, чтобы справиться с високосными годами и часовыми поясами и еще много чего, я предлагаю проверить все промежуточные дни и проверить их, чтобы увидеть, являются ли они субботой или воскресением:

25
задан tghw 27 August 2008 в 16:06
поделиться

8 ответов

Вы оба были на правильном пути. То, что я понял, - то, что SimpleModal добавляет диалоговое окно к телу, которое является внешним ASP.Net's <form>, который повреждает функциональность, так как это не может найти элементы.

Для фиксации его я просто изменил источник SimpleModal для добавления eveything к 'form' вместо 'body'. Когда я создаю диалоговое окно, я также использую persist: true опция, чтобы удостовериться, что кнопки остаются посредством открытия и закрытия.

Спасибо все для предложений!

ОБНОВЛЕНИЕ: Версия 1.3 добавляет appendTo опция в конфигурации для определения, к какому элементу модальное диалоговое окно должно быть добавлено. Вот документы .

33
ответ дан 28 November 2019 в 21:06
поделиться

Все стандартные обратные передачи ASP.NET работают путем вызова __ метод doPostBack javascript на странице. Та функция отправляет форму (ASP.NET только действительно нравится одна форма на страницу), который включает некоторое скрытое поле ввода, в котором живут все состояние отображения и другое совершенство.

На первый взгляд я ничего не вижу в SimpalModal, который завинтил бы форму Вашей страницы или любой стандарт скрытые исходные данные, если, содержание которого модальный, оказалось, прибыло из HTTP, НЕ ДОБИРАЮТСЯ до страницы ASP.NET. Это привело бы к двум формам ASP.NET, представляемым в одном DOM, и будет почти наверняка завинчивать __ doPostBack функция.

Вы рассмотрели использование управление ASP.NET AJAX ModalPopup ?

6
ответ дан 28 November 2019 в 21:06
поделиться

Веб-браузеры не будут POST никакие отключенные или скрытые элементы формы.

Поэтому то, что происходит:

  1. пользователь нажимает на кнопку в Вашем диалоговом окне.
  2. кнопка называет завершение SimpleModal () методом, скрывая диалоговое окно и кнопку
  3. , клиент ОТПРАВЛЯЕТ форму (без идентификатора кнопки)
  4. , платформа ASP.NET не может выяснить, какая кнопка была нажата
  5. Your, серверный код не становится выполняемым.

решение состоит в том, чтобы сделать то, что необходимо сделать на клиенте (закрывающий диалоговое окно в этом случае) и затем назвать __ doPostback () сами.

, Например (где "dlg" является клиентской диалоговой ссылкой SimpleModal):

btn.OnClientClick = string.Format("{0}; dlg.close();",
                        ClientScript.GetPostBackEventReference(btn, null));

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

@Dan

Все стандартные обратные передачи ASP.NET работают путем вызова __ метод doPostBack javascript на странице.

asp:Buttons не звонят __ doPostback (), потому что средства управления вводом HTML уже отправляют форму.

4
ответ дан 28 November 2019 в 21:06
поделиться

Я нашел следующие работы, не изменяя simplemodal.js:

function modalShow(dialog) {

    // if the user clicks "Save" in dialog
    dialog.data.find('#ButtonSave').click(function(ev) {
        ev.preventDefault();

        //Perfom validation                

        // close the dialog
        $.modal.close();

        //Fire the click event of the hidden button to cause a postback
        dialog.data.find('#ButtonSaveTask').click();
    });

    dialog.data.find("#ButtonCancel").click(function(ev) {
        ev.preventDefault();
        $.modal.close();
    });
}          

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

0
ответ дан 28 November 2019 в 21:06
поделиться

FWIW, я обновил сообщение в блоге, на которое Вы указали с прибывшим разъяснением, повторно отправленным здесь - обоснование & другие детали находятся в сообщении в блоге:

решение (с моей последней регистрации перед ланчем):

  1. Переопределение onClose событие диалогового окна, и делают следующее:
    1. Вызов значение по умолчанию диалогового окна Близко функционируют
    2. Набор innerHTML диалогового отделения к единственному & nbsp;
    3. Налет __ doPostBack, указывая на него на новую функцию, newDoPostBack

Из некоторых комментариев I’ve, замеченный в сети, указывают на 1 потребность некоторое разъяснение   К сожалению, I’m больше с тем же работодателем и don’t не имеют доступ к коду, который я использовал, но I’ll делают то, что я могу   Прежде всего необходимо переопределить функцию dialog’s onClose путем определения новой функции и указания на диалоговое окно на него, как это:

$('#myJQselector').modal({onClose: mynewClose});
  • Вызов значение по умолчанию диалогового окна Близко функционируют   В функции Вы определяете, необходимо сначала назвать функциональность по умолчанию (лучшая практика для примерно чего-либо, что Вы обычно переопределяете):
  • Набор innerHTML диалогового отделения к единственному & nbsp; †“Это не необходимый шаг, так пропустите его, если Вы don’t понимаете это.
  • Налет __ doPostBack, указывая на него на новую функцию, Запись newDoPostBack
function myNewClose (dialog)
{
    dialog.close();
    __doPostBack = newDoPostBack;
}
  1. функция newDoPostBack:
function newDoPostBack(eventTarget, eventArgument)
{
    var theForm = document.forms[0];
    if (!theForm)
    {
        theForm = document.aspnetForm;
    }
 
    if (!theForm.onsubmit || (theForm.onsubmit() != false))
    {
        document.getElementById("__EVENTTARGET").value = eventTarget;
        document.getElementById("__EVENTARGUMENT").value = eventArgument;
        theForm.submit();
    }
}
    
0
ответ дан 28 November 2019 в 21:06
поделиться

В новом Jquery.simplemodal-1.3.js есть опция appendTo. Поэтому добавьте параметр с именем appendTo: 'form', потому что по умолчанию он appendTo: 'body', который не работает в asp.net.

0
ответ дан 28 November 2019 в 21:06
поделиться

Была та же проблема, но {appendTo: 'form'} вызвала совершенно неправильный рендеринг модального всплывающего окна (как если бы у меня была проблема с CSS).

Оказывается, шаблон, над которым я строю, включает в себя другие формы на странице. Как только я установил {appendTo: '# aspnetForm'} (идентификатор формы Asp.net по умолчанию), все заработало отлично (включая обратную передачу).

0
ответ дан 28 November 2019 в 21:06
поделиться

попался на этом - большое спасибо tghw и всем другим участникам за исправление формы appendto вместо тела. (решено с помощью атрибутов в версии 1.3)

btw: Если кому-то нужно закрыть диалог программно из .net - вы можете использовать такой синтаксис

private void CloseDialog()
{
    string script = string.Format(@"closeDialog()");
    ScriptManager.RegisterClientScriptBlock(this, typeof(Page), UniqueID, script, true);
}

где javascript closedialog выглядит следующим образом....

    function closeDialog() {
        $.modal.close();
    }
2
ответ дан 28 November 2019 в 21:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: