Запретить обратную передачу после открытия диалогового окна jQuery - PullRequest
0 голосов
/ 08 декабря 2010

Страница:

<body>
 <form id="frmLogin" runat="server">  
  <asp:Button ID="btnClick" OnClientClick="openConfirmDialog();" OnClick="PopulateLabel"  runat="server"/>
  <div id="divDialog"></div>
  <asp:Label ID="lblText" runat="server"></asp:Label>
 </form>
</body>

JS

<script type="text/javascript">
 $(document).ready(function() {
 $("#divDialog").dialog({autoOpen: false,
                     buttons: { "Ok": function()
                                      { 
                                         $(this).dialog("close");
                                      },
                                "Cancel": function()
                                      { 
                                          $(this).dialog("close");
                                      }
                              } 
                   });
 });

 function openConfirmDialog()
 {
  $("#divDialog").dialog("open");
 }

C #

protected void Page_Load(object sender, EventArgs e)
 {
    lblText.Text = "";
 }

protected void PopulateLabel(object sender, EventArgs e)
 {
    lblText.Text = "Hello";
 }

Этот код открывает мне диалоговое окно с Ok иКнопка Отмена, но она не ждет активности пользователя и немедленно публикует страницу, и ярлык заполняется.Мне нужно вызвать функцию c # в зависимости от активности пользователя.Если пользователь нажимает «ОК», ярлык должен заполниться, а если пользователь нажимает «Отмена», он не должен вызывать функцию c #.Как мне этого добиться?

Ответы [ 2 ]

3 голосов
/ 08 декабря 2010

Во-первых, чтобы предотвратить немедленную отправку страницы на сервер, необходимо отменить поведение по умолчанию для события click, возвращая false из вашего обработчика:

<asp:Button ID="btnClick" runat="server" OnClick="PopulateLabel"
    OnClientClick="openConfirmDialog(); return false;" />

Далее,Вам нужно выполнить обратную передачу самостоятельно, когда нажата ваша кнопка Ok:

$("#divDialog").dialog({
    autoOpen: false,
    buttons: {
        "Ok": function() { 
            $(this).dialog("close");
            __doPostBack("btnClick", "");
        },
        "Cancel": function() { 
            $(this).dialog("close");
        }
    }
});

Обратите внимание, что первый аргумент __doPostBack() - это имя элемента управления (его UniqueID в терминологии ASP.NET).Так как кнопка является прямым потомком элемента <form>, мы можем жестко закодировать его id в вызове __doPostBack(), но все станет сложнее, если он будет находиться в иерархии контейнера.В этом случае вы можете использовать ClientScript.GetPostBackEventReference () , чтобы сгенерировать соответствующий вызов __doPostBack().

РЕДАКТИРОВАТЬ: Поскольку ваша страница не содержит обратной передачи-Включенный элемент управления, __doPostBack() не будет определен на стороне клиента.Чтобы обойти эту проблему, вы можете использовать элемент управления LinkButton вместо элемента управления Button .

0 голосов
/ 11 декабря 2010

Добавлена ​​еще одна кнопка и используется событие jQuery click () для запуска события нажатия новой кнопки, которое, в свою очередь, вызовет соответствующий обработчик события в C #

...