Как зайти в Даркнет?!
25th January, 01:11
6
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
895
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
914
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
906
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4351
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
SimpleModal Break ASP.Net Postbacks
Я использую jQuery и SimpleModal в проекте ASP.Net, чтобы сделать несколько хороших диалогов для веб-приложения. К сожалению, любые кнопки в модальном диалоге больше не могут выполнять свои обратные вызовы, что на самом деле неприемлемо.
Есть один источник, который я нашел с обходным путем, но за всю свою жизнь я не могу заставить его работать, главным образом потому, что я не полностью понимаю все необходимые шаги.
У меня также есть обходной путь, который должен заменить обратную связь, но он уродлив и, вероятно, не самый надежный. Мне бы очень хотелось, чтобы эти постбэки снова заработали. Есть какие-нибудь идеи?
UPDATE: я должен уточнить, что обратные сообщения не работают, потому что Javascript, используемый для выполнения обратных сообщений, каким-то образом сломался, поэтому при нажатии на кнопку ничего не происходит.
Вы оба были на правильном пути. Я понял, что SimpleModal добавляет диалог к телу, которое находится вне ASP.Net's <form>, что нарушает функциональность, так как он не может найти элементы.
Чтобы исправить это, я просто изменил источник SimpleModal, чтобы добавить eveything к 'form' вместо 'body' . Когда я создаю диалоговое окно, я также использую опцию persist: true , чтобы убедиться, что кнопки остаются до открытия и закрытия.
Спасибо всем за предложения!
UPDATE: версия 1.3 добавляет параметр appendTo в конфигурацию для указания того, к какому элементу модального диалогового окна следует добавить. Вот эти документы .
Все стандартные постбэки ASP.NET работают путем вызова метода _ _ doPostBack javascript на странице. Эта функция отправляет форму (ASP.NET действительно нравится только одна форма на странице), которая включает в себя некоторое скрытое поле ввода, в котором живет все viewstate и другие блага.
На первый взгляд я не вижу в SimpalModal ничего такого, что могло бы испортить форму вашей страницы или любой из стандартных скрытых входов, если только содержимое этого модала не пришло из HTTP на страницу ASP.NET. Это привело бы к тому, что две формы ASP.NET были бы переведены в одну DOM и почти наверняка испортили бы функцию __doPostBack.
Рассматривали ли вы возможность использования элемента управления ASP.NET AJAX ModalPopup ?
Веб-браузеры не будут POST любые отключенные или скрытые элементы формы.
Так вот что происходит:
- Пользователь нажимает на кнопку в вашем диалоговом окне.
- Кнопка вызывает метод SimpleModal close(), скрывая диалоговое окно и кнопку
- Клиент POSTs форма (без кнопки ID)
- Фреймворк ASP.NET не может понять, какая кнопка была нажата
- Ваш код на стороне сервера не выполняется.
Решение состоит в том, чтобы сделать все, что вам нужно сделать на клиенте (закрывая диалог в этом случае), а затем вызвать __doPostback() самостоятельно.
Например (где "dlg"-это ссылка на диалог SimpleModal на стороне клиента):
btn.OnClientClick = string.Format("{0}; dlg.close();",
ClientScript.GetPostBackEventReference(btn, null));
Это должно скрыть диалоговое окно, отправить форму и вызвать любое серверное событие, которое у вас есть для этой кнопки.
@Dan
Все стандартные постбэки ASP.NET работают путем вызова метода _ _ doPostBack javascript на странице.
asp:Buttons не вызывайте __doPostback(), так как элементы управления HTML ввода уже отправляют форму.
попался на этом один - большое спасибо tghw и со всеми остальными вкладчиками по форме добавление вместо того чтобы исправить тело. (разрешен по атрибутам в версии 1.3)
кстати: если кому-то нужно закрыть диалог программно из .net - вы можете использовать этот тип синтаксиса
private void CloseDialog()
{
string script = string.Format(@"closeDialog()");
ScriptManager.RegisterClientScriptBlock(this, typeof(Page), UniqueID, script, true);
}
где javascript из closedialog выглядит так....
function closeDialog() {
$.modal.close();
}
У меня была та же проблема, но {appendTo:'form'} вызвал модальное всплывающее окно, которое было сделано совершенно неправильно (как будто у меня была проблема с CSS).
Оказывается, шаблон, который я строю сверху, включает в себя другие формы на странице. Как только я установил {appendTo:'#aspnetForm'} (по умолчанию Asp.net form ID), все работало отлично (включая обратную передачу).
FWIW, я обновил сообщение в блоге, на которое вы указали , с пояснением, перепечатанным здесь-рассуждение & другие подробности находятся в сообщении в блоге:
Решение (по состоянию на мою последнюю проверку перед обедом ):
- Переопределите событие onClose диалогового окна и выполните следующие действия:
- Вызовите функцию закрытия диалогового окна по умолчанию
- Установить диалог див по innerHTML к одному
- Hijack _ _ doPostBack, указывая на новую функцию, newDoPostBack
Из некоторых комментариев, которые я видел в интернете, пункт 1 нуждается в некотором уточнении.К сожалению, я больше не работаю с тем же работодателем, и у меня нет доступа к коду, который я использовал, но я сделаю все, что смогу. во-первых, вам нужно переопределить функцию onClose диалогового окна, определив новую функцию и указав на нее свой диалог, Вот так:
$('#myJQselector').modal({onClose: mynewClose});
- Вызовите функцию закрытия диалогового окна по умолчанию. в функции, которую вы определяете, вы должны сначала вызвать функциональность по умолчанию (рекомендуется для всего, что вы обычно переопределяете):
- Установите диалог div innerHTML в один -это не обязательный шаг, поэтому пропустите его, если вы не понимаете этого.
- Hijack _ _ doPostBack, указывая на новую функцию, newDoPostBack
function myNewClose (dialog){dialog.close();__doPostBack = newDoPostBack;}
- Напишите функцию 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();} }
Я нашел следующие работы без изменения 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();
});
}
Поэтому вместо того, чтобы использовать кнопки в диалоговом окне, чтобы вызвать обратную передачу, вы предотвращаете их отправку, а затем находите скрытую кнопку в форме и вызываете ее событие click.
В дополнение к ответу tghw, этот отличный пост в блоге помог мне: jQuery: исправьте ваши отклики в модальных формах - в частности, комментарий BtnMike: "You also must not have CssClass=”simplemodal-close”, установленный на вашем asp:button.- Убрать это из класса было решением not-obvious-to-me.
-Джон
если вы не хотите изменить источник SimpleModal. попробовать это..
После вызова метода modal() добавьте это:
$("#simplemodal-overlay").appendTo('form');
$("#simplemodal-container").appendTo('form');
плагин SimpleModal добавляет два это к вашему markup.
- 'simplemodal-overlay' для фона
- 'simplemodal-container' containig div, который вы хотите как всплывающий модальный.