ASP.NET 버튼 포스트 백이있는 jQuery UI 대화 상자


295

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 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"));

그러나 여전히 성공하지 못했습니다 ...


LOL .. 처음에는 네가 내 질문을 훔쳤다고 생각했지만 네가 먼저 묻는 걸 봤어. 나는 FancyBox에 대한 같은 질문을했습니다 - stackoverflow.com/questions/2686362/...을
nikib3ro

1
appendTo ()를 명시 적으로 호출하는 것보다 더 나은 대답이 있습니다. 이 stackoverflow.com/a/20589833/2487549
Foreever

답변:


314

당신은 해결책에 가까우며, 단지 잘못된 물건을 얻는 것입니다. 다음과 같아야합니다.

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"));
});

모달 옵션이 true로 설정된 경우 어떻게합니까? 내 경우에는이 솔루션은 완벽하지만, 모달없이 - 모달과 모달 효과를 만든 DIV 부모 () 메소드와 대화를 통해 장소입니다
SammuelMiranda

37
$('#divname').parent().appendTo($("form:first"));

이 코드를 사용하면 문제가 해결되었으며 모든 브라우저, Internet Explorer 7, Firefox 3 및 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>

이 전체 예제를 통해이 문제가 발생했을 때 누락 된 내용을 정리할 수있었습니다. 감사!
Dillie-O

34

FWIW : 형식 : 첫 번째 기술은 저에게는 효과가 없었습니다.

그러나 해당 블로그 기사의 기술은 다음과 같습니다.

http://blog.roonga.com.au/2009/07/using-jquery-ui-dialog-with-aspnet-and.html

특히 이것을 대화 선언에 추가하십시오.

  open: function(type,data) {
    $(this).parent().appendTo("form");
  }

1
업데이트 패널에서하지 않으면이 방법이 버튼을 작동시킬 수있는 유일한 방법입니다 (전체 포스트 백을 원함).
Merritt

+1 이것은 나를 위해 일한 유일한 코드입니다. 업데이트 패널을 사용하지 않습니다. 감사합니다!!! 내 하루를 구했다!
Albert Laure

+1 : 위의 해결 방법으로 문제가 해결되지 않았습니다. 그리고 UpdatePanel을 사용하고 있습니다.
Vivian River

대화 상자를 포스트 백 양식으로 다시 가져 오는 가장 단순하고 최상의 솔루션입니다.
GoldBishop

28

jQuery UI v1.10에는 추가 설정이 있습니다. 가 appendTo의 주소로 추가 된 설정, ASP.NET이 양식에 다시 추가 요소에 사용하는 해결 방법은.

시험:

$("#dialog").dialog({
     autoOpen: false,
     height: 280,
     width: 440,
     modal: true,
     **appendTo**:"form"
});

같은 페이지에 2 개의 jquery 대화 상자가 있으면 작동하지 않습니다. 그것이 올바른 해결책이기를 바랍니다.
Matthew Lock

3
오버레이 div가 양식 외부에 유지되어 대화 상자를 덮고 (작동 불가능하게) 종료되므로 parent (). appendTo ( "form") 기술은 모달 대화 상자에서 작동하지 않았습니다. 이 새로운 appendTo 속성을 jquery 1.10과 함께 사용하면 오버레이 div가 올바른 위치에 놓이므로 모달 대화 상자가 올바르게 작동했습니다.
humbads 2016 년

jQuery UI 라이브러리가 appendTo 설정을 추가하도록 업데이트되었으므로 이것은 정답입니다. @Mike에게 많은 시간을 절약 해 주셔서 감사합니다.
AJP

24

위의 의 대답은 나를 위해 속임수를 사용했습니다. 허용되는 답변의 문제점은 페이지에 단일 모달이있는 경우에만 작동한다는 것입니다. 모달이 여러 개인 경우 대화 상자를 초기화하는 동안 사실이 아니라 "open"매개 변수에서 인라인으로 수행해야합니다.

open: function(type,data) { $(this).parent().appendTo("form"); }

첫 번째로 받아 들여진 대답이 여러 모달로 알려주는 것을 수행하면 페이지의 마지막 모달만이 포스트 백을 올바르게 작동시키는 것입니다.


1
+1 절대적으로 맞습니다. 나를 위해 내 문제를 해결했습니다. 그러나 왜 필요한가? 나는 그것을 알아낼 수 없습니다.
Colin

21

기본적으로 jQuery는 DOM을 사용하여 대화 상자를 양식 태그 외부로 이동하기 때문 입니다. 양식 태그 내부로 다시 이동하면 정상적으로 작동합니다. Firefox에서 요소를 검사하여이를 확인할 수 있습니다.


양식 내로 옮겼습니다. jQuery ( "# dialog"). parent (). appendTo (jQuery ( "form : first")); 그러나 여전히 문제는 ...
Paul

btnButton 객체에 다른 jquery 이벤트를 등록하지 않습니까?
Chad Ruppert

언제 양식에 다시 넣습니까? 개봉 직후?
채드 루퍼트

jQuery (function () {jQuery ( "# dialog"). dialog ({드래그 가능 : true, 크기 조정 가능 : true, 표시 : '전송', 숨기기 : '전송', 너비 : 320, 자동 열기 : false, minHeight : 10, 최소 폭 : 10}); jQuery ( "# dialog"). parent (). appendTo (jQuery ( "form : first"));}); 그것이 있어야합니다.
채드 루퍼트

여전히 기쁨이 없습니까? 최소한 버튼을 클릭 할 때 폼에 있으면 게시물이 발생해야합니다. JS 오류가 발생합니까? 모달이 닫히지 않았습니까?
채드 루퍼트

8

프로젝트의 모든 대화 상자 에서이 문제를 해결하고 싶지 않았으므로 간단한 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!

분명히하기 위해이 플러그인은 대화 상자를 호출 할 때 대화 상자를 표시 할 준비가되었다고 가정합니다.



7

환상적인! 이것은 jQuery 모달 내에서 ASP : Button 이벤트가 발생하지 않는 문제를 해결했습니다. 다음과 함께 jQuery UI 모달을 사용하면 버튼 이벤트가 시작됩니다.

// Dialog Link
$('#dialog_link').click(function () {
    $('#dialog').dialog('open');
    $('#dialog').parent().appendTo($("form:first"))
    return false;
});

이 작업을 수행하려면 다음 줄이 핵심입니다!

$('#dialog').parent().appendTo($("form:first"))

3

대화 상자를 만든 후 다음 줄을 추가했습니다.

$(".ui-dialog").prependTo("form");

3

이것은 나에게 가장 명확한 해결책이었습니다.

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변수를 자신의 변수와 일치 하도록 변경하는 것을 잊지 마십시오 .



1

가장 많은 표를 얻은 Robert MacLean의 솔루션은 99 % 정확합니다. 그러나 내가 한 것처럼 누군가가 필요할 수있는 유일한 추가 사항은이 jQuery 대화 상자를 열 때마다 부모에게 추가하는 것을 잊지 마십시오. 아래처럼 :

var dlg = $('#questionPopup').dialog( 'open'); dlg.parent().appendTo($("form:first"));


2 년 전에 위의 답변에 명시된 바와 같이 어쨌든 감사합니다!
Mike

1

modal : true 옵션을 사용하는 동안이 행을 사용하여이 작업을 수행하십시오.

open: function (type, data) { 
    $('.ui-widget-overlay').appendTo("form"); $(this).parent().appendTo("form"); 
  },

1

$('#dialog').parent().appendTo($("form:first"))솔루션은 IE 9에서 제대로 작동하지만 IE 8에서는 대화 상자가 나타나고 사라집니다. 경고를 표시하지 않으면 대화 상자가 나타나지 않는 것처럼 보이지 않습니다. 어느 날 아침 두 버전 모두에서 작동하는 솔루션을 찾고 버전 8과 9 모두에서 작동하는 유일한 솔루션은 다음과 같습니다.

$(".ui-dialog").prependTo("form");

이것이 같은 문제로 어려움을 겪고있는 다른 사람들에게 도움이되기를 바랍니다.


3
UseSubmitBehavior버튼의 속성을 false값으로 설정할 수 있다고 생각합니다 . 이 방법 당신은 어떤 필요하지 않습니다 append또는 prepend전화를.
Yuriy Rozhovetskiy

1

대화 상자를 올바른 방향으로 이동하십시오. 그러나 대화 상자를 여는 버튼에서만 수행해야합니다. 다음은 jQuery UI 샘플의 추가 코드입니다.

$('#create-user').click(function() {
    $("#dialog").parent().appendTo($("form:first"))
    $('#dialog').dialog('open');
})

asp:button대화 상자 내부를 추가 하면 제대로 실행됩니다.

참고 : "사용자 만들기"버튼을 클릭 한 후 포스트 백을 방지하려면 <button>을 <input type = button>으로 변경해야합니다.


0

정확한 해결책은 다음과 같습니다.

$("#dialogDiv").dialog({ other options...,
    open: function (type, data) {
        $(this).parent().appendTo("form");
    }
});
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.