Для того, чтобы справиться с високосными годами и часовыми поясами и еще много чего, я предлагаю проверить все промежуточные дни и проверить их, чтобы увидеть, являются ли они субботой или воскресением:
Вы оба были на правильном пути. То, что я понял, - то, что SimpleModal добавляет диалоговое окно к телу, которое является внешним ASP.Net's <form>
, который повреждает функциональность, так как это не может найти элементы.
Для фиксации его я просто изменил источник SimpleModal для добавления eveything к 'form'
вместо 'body'
. Когда я создаю диалоговое окно, я также использую persist: true
опция, чтобы удостовериться, что кнопки остаются посредством открытия и закрытия.
Спасибо все для предложений!
ОБНОВЛЕНИЕ: Версия 1.3 добавляет appendTo
опция в конфигурации для определения, к какому элементу модальное диалоговое окно должно быть добавлено. Вот документы .
Все стандартные обратные передачи ASP.NET работают путем вызова __ метод doPostBack javascript на странице. Та функция отправляет форму (ASP.NET только действительно нравится одна форма на страницу), который включает некоторое скрытое поле ввода, в котором живут все состояние отображения и другое совершенство.
На первый взгляд я ничего не вижу в SimpalModal, который завинтил бы форму Вашей страницы или любой стандарт скрытые исходные данные, если, содержание которого модальный, оказалось, прибыло из HTTP, НЕ ДОБИРАЮТСЯ до страницы ASP.NET. Это привело бы к двум формам ASP.NET, представляемым в одном DOM, и будет почти наверняка завинчивать __ doPostBack функция.
Вы рассмотрели использование управление ASP.NET AJAX ModalPopup ?
Веб-браузеры не будут POST никакие отключенные или скрытые элементы формы.
Поэтому то, что происходит:
решение состоит в том, чтобы сделать то, что необходимо сделать на клиенте (закрывающий диалоговое окно в этом случае) и затем назвать __ doPostback () сами.
, Например (где "dlg" является клиентской диалоговой ссылкой SimpleModal):
btn.OnClientClick = string.Format("{0}; dlg.close();",
ClientScript.GetPostBackEventReference(btn, null));
, Который должен скрыть диалоговое окно, отправьте форму и назовите любое событие серверной стороны, которое Вы имеете для той кнопки.
@Dan
Все стандартные обратные передачи ASP.NET работают путем вызова __ метод doPostBack javascript на странице.
asp:Buttons не звонят __ doPostback (), потому что средства управления вводом HTML уже отправляют форму.
Я нашел следующие работы, не изменяя 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();
});
}
Так вместо того, чтобы использовать кнопки в диалоговом окне для порождения обратной передачи Вы предотвращаете их отправлять и затем найти скрытую кнопку в форме и назвать ее событие щелчка.
FWIW, я обновил сообщение в блоге, на которое Вы указали с прибывшим разъяснением, повторно отправленным здесь - обоснование & другие детали находятся в сообщении в блоге:
решение (с моей последней регистрации перед ланчем):
Из некоторых комментариев I’ve, замеченный в сети, указывают на 1 потребность некоторое разъяснение К сожалению, I’m больше с тем же работодателем и don’t не имеют доступ к коду, который я использовал, но I’ll делают то, что я могу Прежде всего необходимо переопределить функцию dialog’s onClose путем определения новой функции и указания на диалоговое окно на него, как это:
$('#myJQselector').modal({onClose: mynewClose});
function myNewClose (dialog)
{
dialog.close();
__doPostBack = 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();} }
В новом Jquery.simplemodal-1.3.js есть опция appendTo. Поэтому добавьте параметр с именем appendTo: 'form', потому что по умолчанию он appendTo: 'body', который не работает в asp.net.
Была та же проблема, но {appendTo: 'form'}
вызвала совершенно неправильный рендеринг модального всплывающего окна (как если бы у меня была проблема с CSS).
Оказывается, шаблон, над которым я строю, включает в себя другие формы на странице. Как только я установил {appendTo: '# aspnetForm'}
(идентификатор формы Asp.net по умолчанию), все заработало отлично (включая обратную передачу).
попался на этом - большое спасибо 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();
}