Пользовательское окно сообщения OnClientClick перед обработчиком события Onclick не работает

#c# #jquery #asp.net

Вопрос:

Я хотел создать пользовательское окно сообщений OnClientClick . Если Пользователь выберет «Да», то обработчик события Onclick в коде C# должен получить триггер. Но почему-то я не могу сделать это с помощью ASP.net и jquery.

На данный момент что происходит

  • Запускается только код C#

Чего я и ожидал

  • Сообщение с подтверждением на стороне клиента (Если Пользователь нажимает «ДА» ), Затем запускается код на стороне Сервера.

Мой HTML

  <form id="form1" runat="server">                                                                
     <div>
       <asp:Button ID="btnSubmit" Text="submit" runat="server" OnClick="btnDelete_Click" 
       OnClientClick="if(!ShowDeleteFormConfirmation()) {return false;};" />       
    </div>
</form>
 

Jquery

   function ShowDeleteFormConfirmation() {
        var confirmationMessage,
            dlgButtons = {
                "No": function () {
                    $(this).dialog("close");
                    return false;
                },
                "Yes": function () {
                    $(this).dialog("close");                        
                    return true;
                }
            };
        confirmationMessage = "This form has already been assigned and will be marked as deleted.";
        var $panelContainer = $("<div>"   confirmationMessage   "</div>").appendTo('body');
        $panelContainer.attr("title", "Confirmation to delete a form");
        var myPos = [$(window).width() / 2 - 100, 50];
        $panelContainer.dialog({
            modal: false,
            draggable: false,
            position: myPos,
            button: dlgButtons
        });
    }  
 

C# ////OnClick

       protected void btnDelete_Click(object sender, EventArgs e)
             {
                 ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('Delete button clicked.');", true);
             } ```
 

Это то, что я хотел реализовать.
http://jsfiddle.net/y5z01nbr/

Спасибо, что посмотрели.

Ответ №1:

Хорошо, хотя ваш код работал бы, если бы вы использовали «подтвердить» в коде js, это потому, что alert() и confirm() ОСТАНАВЛИВАЮТ вызывающий код.

Однако сегодня почти ВСЕ библиотеки веб-кода написаны ТАК, чтобы НЕ останавливать и НЕ замораживать браузер. И jQuery-одна из таких систем. (это не останавливает код). Хотя я мог бы представить концепции ожидания — это становится немного слишком сложным для этого ПОСТА.

Итак, что это значит:

 the jQuery code does NOT halt, 
and thus when you click on the button, 
the client side code runs WITHOUT halting 
and thus the button click (server side code) will 
ALSO run right away - not waiting.
 

Итак, в случае диалога jQuery? Вы не можете ОСТАНОВИТЬ код. это означает, что вы должны перевернуть это назад. Должно появиться диалоговое окно jQuery, А затем вам нужно вызвать/запустить/нажать на эту кнопку на стороне сервера. Итак, вам нужно добавить новую кнопку и использовать style=»display:none» вместо существующей кнопки. Затем отобразите диалоговое окно, и на основе ответа вы ЗАТЕМ нажмете (вызов) ту исходную кнопку, которая у вас есть/была сейчас.

Таким образом, код будет выглядеть следующим образом:

 <div>
   <asp:Button ID="btnSubmit" Text="submit" runat="server" OnClick="btnDelete_Click" 
   Style="display:none" clientIDmode="static" />     

   <asp:Button ID="btnSubmitX" Text="submit" runat="server"  
   clientIDmode="static" OnClientClick="ShowDeleteFormConfirmation();" />     

<div>
 

Поэтому я нажал еще одну кнопку — за кодом не было сервера. Скройте первую кнопку без отображения и удалите щелчок клиента. Я переместил клик клиента на 2-ю кнопку.

Теперь мы можем сделать это:

      dlgButtons = {
            "No": function () {
                $(this).dialog("close");
            },
            "Yes": function () {
                $(this).dialog("close");                        
                $('#btnSubmit').click();
            }
        };
 

Итак, что мы делаем, так это запускаем диалог. И, основываясь на «да», мы нажимаем нашу кнопку. Если вы выберете «Нет», диалоговое окно будет закрыто, но никаких других действий не потребуется.

А ОБЩЕЕ жесткое и быстрое правило? Код вашего браузера в наши дни редко блокирует код, вызывающий диалоговое окно jQuery.ui, и на самом деле большинство этих новых элементов управления пользовательским интерфейсом? Код НЕ ждет, НЕ останавливается. И это означает, что вы не можете использовать возвращаемое значение true/false для контроля того, будет ли выполняться заглушка события на стороне сервера или нет (вы можете использовать js confirm (), но не jQuery, так как он не ждет и не останавливает код).

Комментарии:

1. Спасибо, что это работает. Не подумал о скрытом заполнителе для этого. Хорошая Идея.