У меня есть диалоговое окно jQuery UI, отлично работающее на моей странице ASP.NET:
jQuery(function() {
jQuery("#dialog").dialog({
draggable: true,
resizable: true,
show: 'Transfer',
hide: 'Transfer',
width: 320,
autoOpen: false,
minHeight: 10,
minwidth: 10
});
});
jQuery(document).ready(function() {
jQuery("#button_id").click(function(e) {
jQuery('#dialog').dialog('option', 'position', [e.pageX + 10, e.pageY + 10]);
jQuery('#dialog').dialog('open');
});
});
Мой div:
<div id="dialog" style="text-align: left;display: none;">
<asp:Button ID="btnButton" runat="server" Text="Button" onclick="btnButton_Click" />
</div>
Но btnButton_Click никогда не вызывается... Как я могу это решить?
Дополнительная информация: я добавил этот код для перемещения div в форму:
jQuery("#dialog").parent().appendTo(jQuery("form:first"));
Но все же без успеха...
Вы близки к решению, просто получаете неправильный объект. Это должно быть так:
jQuery(function() {
var dlg = jQuery("#dialog").dialog({
draggable: true,
resizable: true,
show: 'Transfer',
hide: 'Transfer',
width: 320,
autoOpen: false,
minHeight: 10,
minwidth: 10
});
dlg.parent().appendTo(jQuery("form:first"));
});
$('#divname').parent().appendTo($("form:first"));
Использование этого кода решило мою проблему, и оно работало в каждом браузере, Internet 7, Firefox 3 и Google Chrome. Я начинаю любить jQuery... Это классная рамка.
Я тоже тестировал с частичным рендерингом, именно то, что искал. Отлично!
<script type="text/javascript">
function openModalDiv(divname) {
$('#' + divname).dialog({ autoOpen: false, bgiframe: true, modal: true });
$('#' + divname).dialog('open');
$('#' + divname).parent().appendTo($("form:first"));
}
function closeModalDiv(divname) {
$('#' + divname).dialog('close');
}
</script>
...
...
<input id="Button1" type="button" value="Open 1" onclick="javascript:openModalDiv('Div1');" />
...
...
<div id="Div1" title="Basic dialog" >
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
postback test<br />
<asp:Button ID="but_OK" runat="server" Text="Send request" /><br />
<asp:TextBox ID="tb_send" runat="server"></asp:TextBox><br />
<asp:Label ID="lbl_result" runat="server" Text="prova" BackColor="#ff0000></asp:Label>
</ContentTemplate>
<asp:UpdatePanel>
<input id="Button2" type="button" value="cancel" onclick="javascript:closeModalDiv('Div1');" />
</div>
FWIW, форма: первая техника для меня не работала.
Однако технику в этой статье в блоге:
http://blog.roonga.com.au/2009/07/using-jquery-ui-dialog-with-aspnet-and.html
В частности, добавив это в объявление диалога:
open: function(type,data) {
$(this).parent().appendTo("form");
}
Помните, что в jQuery UI v1.10 есть дополнительная настройка. Существует добавленная appendTo настройка для адреса ASP.NET, который вы используете для повторного добавления элемента в форму.
Try:
$("#dialog").dialog({
autoOpen: false,
height: 280,
width: 440,
modal: true,
**appendTo**:"form"
});
ken ответ выше помогло. Проблема с принятым ответом заключается в том, что он работает только в том случае, если на странице есть один модальный код. Если у вас есть несколько модалов, вам нужно сделать это inline в параметре "open" при инициализации диалога, а не после факта.
open: function(type,data) { $(this).parent().appendTo("form"); }
Если вы делаете то, что первый принятый ответ сообщает вам о нескольких модалях, вы получите только последний модальный текст на странице, работающей над обложкой postbacks, но не все из них.
В первую очередь это потому, что jQuery перемещает диалог за пределами тегов формы, используя DOM. Переместите его обратно в теги формы, и он должен работать нормально. Вы можете увидеть это, проверив элемент в Firefox.
Мне не нужно было обойти эту проблему для каждого диалога в моем проекте, поэтому я создал простой плагин jQuery. Этот плагин предназначен только для открытия новых диалогов и размещения их в форме ASP.NET:
(function($) {
/**
* This is a simple jQuery plugin that works with the jQuery UI
* dialog. This plugin makes the jQuery UI dialog append to the
* first form on the page (i.e. the asp.net form) so that
* forms in the dialog will post back to the server.
*
* This plugin is merely used to open dialogs. Use the normal
* $.fn.dialog() function to close dialogs programatically.
*/
$.fn.aspdialog = function() {
if (typeof $.fn.dialog !== "function")
return;
var dlg = {};
if ( (arguments.length == 0)
|| (arguments[0] instanceof String) ) {
// If we just want to open it without any options
// we do it this way.
dlg = this.dialog({ "autoOpen": false });
dlg.parent().appendTo('form:first');
dlg.dialog('open');
}
else {
var options = arguments[0];
options.autoOpen = false;
options.bgiframe = true;
dlg = this.dialog(options);
dlg.parent().appendTo('form:first');
dlg.dialog('open');
}
};
})(jQuery);</code></pre>
Итак, чтобы использовать плагин, вы сначала загружаете пользовательский интерфейс jQuery, а затем плагин. Затем вы можете сделать что-то вроде следующего:
$('#myDialog1').aspdialog(); // Simple
$('#myDialog2').aspdialog('open'); // The same thing
$('#myDialog3').aspdialog({title: "My Dialog", width: 320, height: 240}); // With options!
Чтобы быть понятным, этот плагин предполагает, что вы готовы показать диалог, когда вы его вызываете.
Я знаю, что это старый вопрос, но для тех, у кого есть такая же проблема, есть более новое и более простое решение: в jQuery UI 1.10.0 была добавлена опция "appendTo"
http://api.jqueryui.com/dialog/#option-appendTo
$("#dialog").dialog({
appendTo: "form"
....
});
Fantastic! Это решило мою проблему с событием ASP: Button, не срабатывающим внутри jQuery модального. Обратите внимание, что с использованием jQuery UI modal со следующим разрешением запускается событие кнопки:
// Dialog Link
$('#dialog_link').click(function () {
$('#dialog').dialog('open');
$('#dialog').parent().appendTo($("form:first"))
return false;
});
Следующая строка - это ключ, чтобы заставить это работать!
$('#dialog').parent().appendTo($("form:first"))
Это было самым ясным решением для меня
var dlg2 = $('#dialog2').dialog({
position: "center",
autoOpen: false,
width: 600,
buttons: {
"Ok": function() {
$(this).dialog("close");
},
"Cancel": function() {
$(this).dialog("close");
}
}
});
dlg2.parent().appendTo('form:first');
$('#dialog_link2').click(function(){
dlg2.dialog('open');
Все содержимое внутри dlg2
будет доступно для вставки в вашу базу данных. Не забудьте изменить переменную dialog
в соответствии с вашими.
Я просто добавил следующую строку после создания диалога:
$(".ui-dialog").prependTo("form");
В ASP.NET просто используйте UseSubmitBehavior="false"
в вашей кнопке ASP.NET:
<asp:Button ID="btnButton" runat="server" Text="Button" onclick="btnButton_Click" UseSubmitBehavior="false" />
Решение $('#dialog').parent().appendTo($("form:first"))
отлично работает в IE 9. Но в IE 8 он заставляет диалоговое окно появляться и исчезать напрямую. Вы не можете увидеть это, если не поместите некоторые предупреждения, поэтому кажется, что диалог никогда не появляется.
Однажды утром я нашел решение, которое работает в обеих версиях, и единственное решение, которое работает на обеих версиях 8 и 9, это:
$(".ui-dialog").prependTo("form");
Надеюсь, это поможет другим, кто борется с той же проблемой.
UseSubmitBehavior
Button в значение false
. Таким образом, вам не нужно append
или prepend
вызовы.
Используйте эту строку, чтобы сделать эту работу при использовании опции modal: true.
open: function (type, data) {
$('.ui-widget-overlay').appendTo("form"); $(this).parent().appendTo("form");
},
Решение от Robert MacLean с наибольшим количеством голосов на 99% правильное. Но единственное дополнение, которое может потребоваться, как и я, - это когда вам нужно открыть этот диалог jQuery, не забудьте добавить его к родительскому. Как ниже:
var dlg = $('#questionPopup').dialog( 'open');
dlg.parent().appendTo($("form:first"));
Переместите диалог правильно, но вы должны сделать это только в кнопке, открывающей диалог. Вот еще один код в образце jQuery UI:
$('#create-user').click(function() {
$("#dialog").parent().appendTo($("form:first"))
$('#dialog').dialog('open');
})
Добавьте свой asp:button
в диалоговом окне, и он работает хорошо.
Примечание: вы должны изменить кнопку <button> на < input type = button > , чтобы предотвратить обратную передачу после нажатия кнопки "создать пользователя".
Точное решение:
$("#dialogDiv").dialog({ other options...,
open: function (type, data) {
$(this).parent().appendTo("form");
}
});