Имитация постбэка другой кнопки в диалоге jQuery - PullRequest
2 голосов
/ 23 февраля 2010

У меня есть следующая страница ASPX:

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
    <script src="js/jquery-1.2.6.min.js" type="text/javascript"></script>
    <script src="js/jquery-ui-1.6.custom.min.js" type="text/javascript"></script>
    <script type="text/javascript">
        $(function() {

            $("#dialog").dialog({
                bgiframe: true,
                autoOpen: false,
                height: 300,
                modal: true,
                buttons: {
                    'Ok': function() {
                        $(this).dialog('close');
                        __doPostBack('TreeNew', '');
                    },
                    Cancel: function() {
                        $(this).dialog('close');
                    }
                },
                close: function() {
                    ;
                }
            });
        });
        function ShowDialog() {
            $('#dialog').dialog('open');
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Button ID="TreeNew" runat="server" Text="Nuevo" OnClientClick="ShowDialog(); return false;"/>
        <asp:Label ID="Message" runat="server"></asp:Label>
        <div id="dialog" title="Create new user">
            <p id="validateTips">All form fields are required.</p>
            <asp:RadioButtonList ID="ContentTypeList" runat="server">
                <asp:ListItem Value="1">Text</asp:ListItem>
                <asp:ListItem Value="2">Image</asp:ListItem>
                <asp:ListItem Value="3">Audio</asp:ListItem>
                <asp:ListItem Value="4">Video</asp:ListItem>
        </asp:RadioButtonList>
        </div>
    </div>
    </form>
</body>
</html>

Когда пользователь нажимает на кнопку TreeNew, появляется модальное диалоговое окно, затем он / она выбирает опцию и нажимает кнопку Ok, чтобы выполнить обратную передачу.

Мне нужно, чтобы на стороне сервера выполнялся метод TreeNew_Click: как я могу это сделать?

Если я использую __doPostBack ('TreeNew', ''), он выдаст мне следующую ошибку: "Ожидается объект".

ОБНОВЛЕНИЕ:
Я нашел источник ошибки: функция __ doPostBack не определена. Я не собираюсь удалять вопрос, потому что я думаю, что ответ Криса Кларка настолько интересен.

1 Ответ

4 голосов
/ 23 февраля 2010

Как правило, если вы когда-нибудь набираете текст "__doPostBack (..."), вам следует пересмотреть свой подход.

В этом случае вам нужно просто поместить серверную кнопку asp.net внутри div, который вы превращаете в диалоговое окно, и использовать его вместо кнопки jQuery. Таким образом, код обратной связи будет подключен для вас. Однако есть одна оговорка - когда jQuery превращает ваш div (я собираюсь предположить, что это div) в диалог, он вырывает div из элемента формы . Это означает, что вы должны прикрепить его НАЗАД к форме ДО того, как произойдет обратная передача. Вы можете сделать это в закрытой функции диалога. Обратная передача будет происходить правильно.

Если вы действительно хотите использовать сгенерированную кнопку jQuery OK, у вас есть несколько вариантов. Сначала вы можете щелкнуть кнопку asp.net на стороне сервера на странице и скрыть ее, а затем вызвать событие нажатия кнопки asp.net из кода кнопки OK. Во-вторых, вы можете создать функцию javascript с сервера, используя Page.ClientScript.GetPostBackEventReference, которая будет содержать код __doPostBack, который вы пытались написать выше. Затем вызовите эту функцию из кода JS кнопки OK.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...