Элементы управления asp.net не читаются, когда в диалоговом окне jQuery как это исправить? - PullRequest
3 голосов
/ 29 сентября 2011

У меня колючий.У меня есть страница веб-форм asp.net.На странице у меня есть тег div, который я настроил для использования в качестве диалога jQuery.В div есть некоторые элементы управления jQuery.Я открываю диалог и нажимаю на одну из кнопок, начинаю постбэк.Когда страница отправляла обратно, кодовый элемент не считывал значения в элементах управления.Конечно, небольшое углубление в html показывает, что диалог берет мой div и перемещает его в конец html-страницы вне моего тега asp.net.Urk!

Как, черт возьми, я могу обойти это?

Не то, что это действительно помогает ситуации с помощью моего диалогового кода здесь:

 $("#dialog-copy").dialog({
        autoOpen: false,
        height: 200,
        width: 400,
        modal: true,
        resizable: false,
        buttons: {
            'Cancel': function () {
                $(this).dialog('close');
            },
            'Yes': function () {
                $(this).dialog('close');
                $("[id*=btnCopy]")[0].click();
            }
        },
        open: function () {
            $(":button:contains('Yes')").addClass("blue");
        }
    });
     $("[id*=btnCopy]").live('mousedown', function (e) {
        e.preventDefault();
        $("#dialog-copy").dialog('open');
     });

И типичный divтег (который перемещен за пределы моего тега формы) выглядит следующим образом:

<div id="dialog-copy" style="DISPLAY: none" title="Copy Schedule">
    <p>Please enter a schedule number:</p>
    <asp:Textbox runat="server" id="txtSchNo"></asp:Textbox>
</div>

Нажатие «Да» запускает кнопку, которая вызывает обратную передачу.

Ответы [ 3 ]

5 голосов
/ 29 сентября 2011

Это известная проблема, вы должны добавить ее в форму, как эта, и ваши обычные элементы управления .NET могут отправить обратно:

    open: function () {
        $(this).parent().appendTo("form");
        $(":button:contains('Yes')").addClass("blue");
    }

ОБНОВЛЕНИЕ для более новых версий jQuery:

   $('#yourDIv').dialog({
        .....,
        appendTo: $('form'),        
       ....

    });
2 голосов
/ 29 сентября 2011

Сделайте так, чтобы ваша функция диалоговой кнопки добавила в форму скрытое поле с правильным именем, т. Е. Использовала ввод в самом диалоговом окне для справки, прежде чем она отправит форму.

    buttons: {
        'Cancel': function () {
            $(this).dialog('close');
        },
        'Yes': function () {
            $(this).dialog('close');
            $('#dialog-copy').find('input').each( function() {
                var $this = $(this);
                $('form').append('<input type="hidden" name="'
                                   + $this.attr('name')
                                   + '" value="'
                                   + $this.val() + '" />');
            });
            $("[id*=btnCopy]")[0].click();
        }
    },
0 голосов
/ 29 сентября 2011

Вы можете попробовать это. Сохраняйте регулярный ввод HTML в диалоговом окне и непосредственно перед нажатием кнопки обратной передачи перемещайте значение в текстовом вводе HTML в asp: TextBox или даже asp: HiddenInput.

Как:

$("#dialog-copy").dialog({
        autoOpen: false,
        height: 200,
        width: 400,
        modal: true,
        resizable: false,
        buttons: {
            'Cancel': function () {
                $(this).dialog('close');
            },
            'Yes': function () {
                $(this).dialog('close');
                $('input[id$=_txtSchNo').val($('#dummy').val());
                $("[id*=btnCopy]")[0].click();
            }
        },
        open: function () {
            $(":button:contains('Yes')").addClass("blue");
        }
    });
     $("[id*=btnCopy]").live('mousedown', function (e) {
        e.preventDefault();
        $("#dialog-copy").dialog('open');
     });

И разметка:

<form>
....
<asp:Textbox runat="server" id="txtSchNo"></asp:Textbox>
...
</form>
<div id="dialog-copy" style="DISPLAY: none" title="Copy Schedule">
    <p>Please enter a schedule number:</p>
    <input type="text" id="dummy" />
</div>
...