私は私のASP.NETページで素晴らしい仕事jQuery UIダイアログを持っています:
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をformに移動するためにこのコードを追加しました。
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 Explorer 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");
}
上記のkenの答えは私にとってはトリックでした。受け入れられた答えの問題はそれがあなたがページの上に単一のモーダルを持っている場合にだけ働くということです。複数のモーダルがある場合は、ダイアログの初期化中に「open」パラメータ内でインラインで行う必要があります。事後ではありません。
open: function(type,data) { $(this).parent().appendTo("form"); }
あなたが最初の受け入れられた答えが複数の様相であなたに言うことをするならば、あなたはポストバックをきちんと動かしているページの最後の様相だけを得るでしょう、それらのすべてではありません。
主に、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 UIをロードしてからプラグインをロードします。その後、次のようなことができます。
$('#myDialog1').aspdialog(); // Simple
$('#myDialog2').aspdialog('open'); // The same thing
$('#myDialog3').aspdialog({title: "My Dialog", width: 320, height: 240}); // With options!
明確にするために、このプラグインはあなたがそれを呼び出したときにダイアログを表示する準備ができていると仮定します。
すごい!これで、ASP:ButtonイベントがjQueryモーダル内で発生しないという私の問題が解決しました。次のようにjQuery UIモーダルを使用するとbuttonイベントを発生させることができます。
// Dialog Link
$('#dialog_link').click(function () {
$('#dialog').dialog('open');
$('#dialog').parent().appendTo($("form:first"))
return false;
});
次の行はこれを機能させるための鍵です!
$('#dialog').parent().appendTo($("form:first"))
私はこれが古い質問であることを知っています、しかし同じ問題を抱えている人のためにより新しくそしてより簡単な解決策があります: "appendTo"オプションがjQuery UI 1.10.0で導入されました
http://api.jqueryui.com/dialog/#option-appendTo
$("#dialog").dialog({
appendTo: "form"
....
});
これは私にとって最も明確な解決策でした
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
変数を変更することを忘れないでください。
ASP.NETでは、ASP.NETボタンにUseSubmitBehavior="false"
を使用するだけです。
<asp:Button ID="btnButton" runat="server" Text="Button" onclick="btnButton_Click" UseSubmitBehavior="false" />
ダイアログを作成した後、次の行を追加しました。
$(".ui-dialog").prependTo("form");
ダイアログを正しい方法で移動しますが、ダイアログを開くボタンでのみ実行する必要があります。これがjQuery UIサンプルの追加コードです。
$('#create-user').click(function() {
$("#dialog").parent().appendTo($("form:first"))
$('#dialog').dialog('open');
})
ダイアログの中にasp:button
を追加すると、うまく動きます。
注:「ユーザーの作成」ボタンをクリックした後のポストバックを防ぐために、<button>を<input type = button>に変更する必要があります。
$('#dialog').parent().appendTo($("form:first"))
解決法はIE 9ではうまくいきますが、IE 8ではダイアログが直接現れたり消えたりします。これは、警告を出さない限り表示されないため、ダイアログは表示されません。私はある朝、両方のバージョンで機能する解決策を見つけ、バージョン8と9の両方で機能する唯一の解決策を見つけます。
$(".ui-dialog").prependTo("form");
これが同じ問題に苦しんでいる他の人に役立つことを願っています
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"));
正確な解決策は、
$("#dialogDiv").dialog({ other options...,
open: function (type, data) {
$(this).parent().appendTo("form");
}
});