Поля формы ASP.NET не публикуются из colorbox

У меня есть форма, которая отображается внутри цветового поля jQuery. Когда форма отправляется, поля в этой форме не отправляются обратно на страницу. Я изменил javascript, чтобы сохранить поля формы в скрытых полях при отправке, и эти поля отправляются обратно. Проблема в том, что, поскольку это поле для входа в систему, я действительно не хочу перемещать пароль таким образом. Основное содержимое формы находится внутри панели обновления. Вот код моей мастер-страницы:

<form id="myform" runat="server" clientidmode="Static" method="post">
    <asp:ScriptManager ID="ecommerceManager" runat="server" ClientIDMode="Static" EnableViewState="False" EnablePageMethods="True">
        <Scripts>
            <asp:ScriptReference Path="~/js/jquery-1.6.1.min.js" />
            <asp:ScriptReference Path="~/js/jquery.colorbox.min.js" />
            <asp:ScriptReference Path="~/js/eCommerce.js" />
        </Scripts>
    </asp:ScriptManager>

    <div style="width: 940px; margin-left: auto; margin-right: auto;">
        <div align="left">
            TOP OF THE PAGE
            <asp:ContentPlaceHolder ID="bodyContent" runat="server" ClientIDMode="Static">
            </asp:ContentPlaceHolder>
            BOTTOM OF THE PAGE
        </div>
    </div>

    <script type="text/javascript">
        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(closeLoading);
        Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(loadData);
    </script>
    </form>

Вот часть кода с моей основной страницы по умолчанию, которая использует главную страницу:

<asp:Content ID="mainContent" ContentPlaceHolderID="bodyContent" runat="server">


    <asp:UpdatePanel ID="ecommerceUpdate" runat="server" ClientIDMode="Static">
        <ContentTemplate>

            <asp:Panel ID="pnlEcomMain" runat="server" CssClass="ecom_main" ClientIDMode="Static">
                <asp:HiddenField ID="statusField" runat="server" ClientIDMode="Static" ViewStateMode="Disabled" EnableViewState="False" />
                <asp:HiddenField ID="hdnUsername" runat="server" ClientIDMode="Static" ViewStateMode="Disabled" EnableViewState="False" />


                <div class="add_product">
                    <div class="add_product_menu text_12_bold">
                        <asp:Image ID="imgAddProducts" ImageUrl="~/images/ecom_icon_add_2.gif" CssClass="std_btn" AlternateText="Add Products" runat="server" ClientIDMode="Static" />Add Additional Products:<br /><br />
                        <asp:DropDownList ID="newproduct" runat="server" ClientIDMode="Static" 
                            onchange="addProduct()">
                        </asp:DropDownList>
                    </div>
                </div>
                </asp:Panel>

                <div class="clear"></div>

                <!--- HERE IS THE COLORBOX POPUP CONTENT --->
            <div style="display: none; visibility: hidden;">
                <div id="inline_login">
                    <p><strong>User Login Details Go Here</strong></p>

                    User Name: <asp:TextBox ID="loginName" runat="server" ClientIDMode="Static" EnableViewState="False" ViewStateMode="Disabled" /><br />
                    Password: <asp:TextBox ID="loginPassword" runat="server" TextMode="Password" ClientIDMode="Static" /><br />
                    <input type="button" name="loginBtn" id="loginbtn" value="Login" onclick="javascript:validateLogin()" />



                </div>
            </div>

            </asp:Panel>

            <asp:Label ID="xmlContent" runat="server" />
       </ContentTemplate>
    </asp:UpdatePanel>

</asp:Content>

Новое поле продукта публикуется правильно, но имя пользователя и пароль не публикуются, ЕСЛИ Я не скопирую их в скрытые поля перед публикацией. Я предполагаю, может быть, это конфликт с панелью обновлений? Первоначально я пытался заставить управление входом работать на панели обновлений, но прочитал на форумах, что с этим связана известная проблема.

Любое понимание этого будет очень высоко оценено. Я использую firebug и могу подтвердить, что полей просто нет в сообщении, поэтому ASP их не находит.


person Dexter    schedule 21.06.2011    source источник
comment
У меня тоже была эта проблема. Я обнаружил, что автор ColorBox обратился к нему непосредственно на своем сайте: jacklmoore.com/colorbox/ faq#faq-asp   -  person Wallace Brown    schedule 12.06.2012


Ответы (4)


По-видимому, несмотря на то, что поле цвета находится внутри формы, на самом деле оно перемещает содержимое за пределы формы. Я смог решить эту проблему, добавив эту строку кода в мою функцию отправки JavaScript:

jQuery('#inline_login').appendTo('form'); 

Надеюсь, это поможет кому-то еще!

person Dexter    schedule 21.06.2011
comment
Вы также можете переместить поле цвета внутрь формы: $('#colorbox').appendTo('form'); Это проблема, потому что вы загружаете не весь элемент формы в colorbox, а только поля формы. Это приводит к тому, что ваша форма ломается, потому что разметка colorbox существует за пределами элемента формы. - person Jack; 22.06.2011
comment
@ Джек, я добавил эту строку кода в свою функцию отправки. Это хорошо работает для первого поста, но когда я вернулся, чтобы открыть цветовую панель для другого добавления/редактирования, наложение было сверху на цветовую панель, делая ее непригодной для использования, так как она просто закрывалась всякий раз, когда я пытался сфокусировать ввод. Любые идеи, как я могу обойти это? - person Deadlykipper; 19.03.2012
comment
Моя ошибка... вы также должны добавить #cboxOverlay к форме: $('#cboxOverlay, #colorbox').appendTo('form'); - person Jack; 20.03.2012
comment
Я всего 2 дня своей жизни на это. Аррррррррррррр! Спасибо всем здесь за предоставление решения. - person rf_wilson; 26.06.2013

Я никогда не использовал цветовую панель jQuery, но у меня была аналогичная проблема с модальным всплывающим окном пользовательского интерфейса jQuery. Что он делал, так это то, что когда я прикреплял всплывающее окно, он перемещал содержимое div за пределы формы asp.net, поэтому элементы управления не отправлялись обратно.

person Ben Robinson    schedule 21.06.2011
comment
Удалось ли вам когда-нибудь решить эту проблему или найти обходной путь? Как упоминалось в моем посте, если я использую JavaScript для копирования значений полей в скрытые поля формы, это сработает, но, поскольку это взломанное решение, и я имею дело с паролем, я предпочитаю этого не делать. - person Dexter; 21.06.2011
comment
Я создал веб-службу и использовал ajax для публикации значений, а затем обновил экран с помощью javascript результатами вызова веб-службы. - person Ben Robinson; 21.06.2011

Еще один вариант, который работал у меня в конкретной .NET CMS (DNN), заключался в том, чтобы взять исправление Джека и присоединить его к событию cbox_complete. Публикация на случай, если кто-то еще может найти это полезным.

$(document).bind('cbox_complete', function () {
    $("#colorbox, #cboxOverlay").appendTo('form:first');
});
person Joel Koenigs    schedule 11.03.2015

Просто была похожая проблема с colorbox & form, решил ее таким образом. Моя проблема заключалась в том, что отправка не работала, поскольку наборы полей были лишены тега формы; Поэтому, если ваша форма не публикуется в colorbox, попробуйте это, отправив идентификатор формы в качестве href для содержимого colorbox.

$(document).ready(function () {
        $('#login-trigger').click(function () {
            $.colorbox({
                inline: true,
                href: "#login-form",
                close: "×",
                onOpen: function () { $('#login-content').css({ display: 'block' }); },
                onClosed: function () { $('#login-content').css({ display: 'none' }); }
            });
            return false;
        });
person Gabriel P.    schedule 09.08.2012