Вложенные веб-формы ASP.Net + nyromodal: постбэки умирают после закрытия модального режима
У меня есть веб-страница ASP.Net, которая использует шаблон мастер-страницы.
На странице есть панель обновления с некоторыми базовыми функциями AJAX (измените значение DropDownList, и панель обновления обновится). Это все работает хорошо.
У меня также есть ссылка, которая выскакивает из модального нейромодала, внутри модала загружается другая веб-форма ASP.Net. Потому что я хочу, чтобы сама эта страница имела свою собственную функциональность, а не просто была статической страницей и т. Д. Это "Создать" Новый "диалог, если быть точным. Таким образом, он создает новую запись, затем, когда она закрывается, вы возвращаетесь на главную страницу со списком записей и т. Д.
Я использую следующий код jQuery, чтобы инициировать вызовы nyromodal. Этот код также включает в себя различные другие настройки и настройки, чтобы сделать nyromodal более совместимым с ASP.Net, поскольку речь идет о пятой последовательной несовместимости, с которой я столкнулся и решил между nyromodal и ASP.Net (Урок: держитесь подальше от ASP.Net)
$(document).ready(function(){
$(function(){
$('.modal').live('click', function(evt){
$(this).nyroModalManual({'blocker':'#aspnetForm',minWidth:640,minHeight:400,endShowContent:function(elt, settings) { $('input:text:first', elt.content).focus(); }});
evt.preventDefault();
});
});
});
Этот код работает очень хорошо (спасибо Брайану), так как он решает несколько других проблем с ASP.Net и nyromodal, работающих вместе. Он даже использует блокировщик: бит #aspnetForm, который не дает nyromodal выходить за пределы основной формы обратной передачи ASP.Net с именем aspnetForm, которая предназначена для решения почти идентичной проблемы.
НО..
Веб-страница, которую я загружаю в мой модал, также является веб-формой.Net. Так что он также имеет свой собственный встроенный постбэк aspnetForm, конечно. Поэтому, когда появляется модальный режим и я использую FireBug для проверки структуры DOM, у меня фактически есть две формы ASP.Net (вложенные). А поскольку nyromodal - это, по сути, просто div (или несколько div), теги формы по сути являются вложенными.
Так что я думаю, что это круто. Это на самом деле сбой IE7 полностью (фатальные исключения). IE7 + FireFox: когда я закрываю диалог, моя основная веб-форма больше не отправляет. Я думаю, что это было очень смущено 2 тегами формы, которые были там минуту назад.
Это должно быть действительно простым требованием, чтобы иметь возможность открывать веб-форму ASP.Net в качестве содержимого вашего мода с использованием nyromodal. Я обвиняю его в ASP.Net за то, что он такой отсталый и поместил обязательный тег "form" на каждой странице. Если бы я использовал PHP, я бы не столкнулся ни с одной из этих проблем, с которыми я столкнулся сегодня, но я застрял, используя ASP.Bloat для рабочих целей.
Любые мысли или идеи очень ценятся!:)
4 ответа
Рассматривали ли вы открытие страницы в модале в виде iFrame, чтобы ее содержимое (новый тег формы и т. Д.) Не мешало странице хоста?
$(this).nyroModalManual({type:'iframe'});
Самое простое решение, которое я нашел, - это загрузить всплывающее окно как iframe, а не как inline или через AJAX. Просто мысль.:)
Если вы поместите это в заголовок страницы. Это позволяет нейро-модальному закрытию симулировать обратную передачу.
<script type="text/javascript">
$(document).ready(function(){$.nyroModalSettings({
modal: true,minWidth: ###,minHeight: ###,
endRemove:function(){
document.location='pageYouWantToRefresh.aspx';
}
});});
</script>
просто измените document.location, и он пойдет туда, когда окно закроется.
Я на самом деле человек, который сообщил об этой проблеме. Во-первых, вы пробовали плагин ASP.NET nyroModal, который разработал jimbobmcgee (на той же странице, на которую вы ссылались)? У меня пока нет, так как я не могу найти время для изучения документации. Если ты делаешь это, дай мне знать, как я работаю для тебя.
Это на самом деле идеальное время... Еще одна альтернатива, которой я занимаюсь, - использование обычных HTML-страниц вместо WebForms в модальном режиме. Итак, я намереваюсь обернуть мой код на стороне сервера в веб-сервис и использовать jQuery, чтобы вызвать его и вернуть ответ JSON.
Прости за точность моего объяснения, так как я только начал с веб-сервисов и методов страниц, поэтому я слишком учусь. Отсюда и причина того, что я попросил кого-нибудь опубликовать простой пример "Hello World".
Надеюсь, это немного поможет.