Telerik «radconfirm» не вызывает href при нажатии «OK» в Chrome

#asp.net #google-chrome #webforms #telerik #asp.net-ajax

#asp.net #google-chrome #веб-формы #telerik #asp.net-ajax

Вопрос:

С сегодняшнего дня у меня возникли некоторые проблемы с всплывающим сообщением Telerik RadConfirm на ASPX LinkButton. После первого нажатия кнопки LinkButton появляется сообщение, и если я нажимаю «OK», ничего не происходит, и сообщения об ошибках не отображаются в консоли JS браузера. Если я снова нажму кнопку LinkButton, событие обратной отправки запустится так, как должно было произойти при первом нажатии.

Такое поведение, похоже, существует только в Chrome. Firefox, Edge и Opera не затрагиваются. Эта проблема появилась только с сегодняшнего дня, и поведение одинаково на всех веб-сайтах, которые у нас есть в Сети.

Это пример. Обратите внимание, что каждый фрагмент кода, написанный с одинаковой областью видимости, показывает одинаковое поведение.

 <asp:LinkButton ID="docSaveBtn" runat="server" Text="Save" 
SkinID="linkButton_blue" OnClick="docSaveBtn_Click" 
OnClientClick="return radconfirm('Are you sure?', event, null ,null, null, '');" />
  

На странице отображаемый HTML-код выглядит следующим образом:

 <a onclick="return radconfirm('Are you sure?', event, null ,null, null, '');" 
id="MC_docSaveBtn" class="linkButton_blue" aria-disabled="false" 
href="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(amp;quot;ctl00$MC$docSaveBtnamp;quot;, amp;quot;amp;quot;, true, amp;quot;amp;quot;, amp;quot;amp;quot;, false, true))">Save</a>
  

Обновление 1

Запись, null а не event устраняет проблему с другими элементами управления ASPX, такими как ImageButton. Просто чтобы объяснить это, вот пример:

 <asp:ImageButton ID="imgDuplica" runat="server" 
ImageUrl="~/App_Themes/AQP.v.1.0.0.1/Images/16x16/documenti.png" 
SkinID="documents_image_small" OnClick="imgDuplica_Click" ToolTip="Duplica Gara"
OnClientClick="return radconfirm('Procedere alla duplicazione della gara?', null, null, null, null, '');"  />
  

Опять же, отображаемый HTML следующий:

 <input type="image" name="ctl00$MC$uc_RisultatoRicercaGara$rgResults$ctl00$ctl08$imgDuplica" 
id="ctl00_MC_uc_RisultatoRicercaGara_rgResults_ctl00_ctl08_imgDuplica" title="Duplica Gara" 
src="../../App_Themes/AQP.v.1.0.0.1/Images/16x16/documenti.png" 
onclick="return radconfirm('Procedere alla duplicazione della gara?', null, null, null, null, '');WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(amp;quot;ctl00$MC$uc_RisultatoRicercaGara$rgResults$ctl00$ctl08$imgDuplicaamp;quot;, amp;quot;amp;quot;, true, amp;quot;amp;quot;, amp;quot;amp;quot;, false, false))">
  

null или просто return radconfirm(''); не работает с LinkButton в Chrome 73. Другие элементы управления работают, и все элементы управления работают в разных браузерах.

Исправление для создания события и последующей обратной передачи изнутри не работает должным образом. Мне нужно передать ссылку HREF событию, и невозможно создать событие для каждого radconfirm, который у меня уже есть в моем проекте.

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

1. Пожалуйста, проверьте мой ответ, я его обновил.

Ответ №1:

Я не уверен, как это сработало в первую очередь. Кнопка LinkButton открывает диалоговое окно подтверждения, однако последующая обратная передача прерывает действия. Чтобы предотвратить обратную отправку, в обработчике событий ClientClick попробуйте вызвать radconfirm() метод вместо его возврата, затем return false; после выполнения метода. Ознакомьтесь со статьей «Вызов RadConfirm через JavaScript«, чтобы увидеть пример использования RadConfirm.

Кроме того, функция обратного вызова «event«, которая используется для radconfirm, недействительна, поскольку существует встроенный метод с именем Window.event() и будет конфликтовать с ней.

Попробуйте изменить функцию обратного вызова на что-нибудь другое, например: eventFn, MyEvent, в общем, на все, что не конфликтует с существующими / встроенными функциями.

Вот пример правильного подхода, который вы можете попробовать:

HTML-разметка и на стороне клиента

 <script type="text/javascript">
    function eventFn(args) {
        if (args)
            __doPostBack('<%= docSaveBtn.ClientID %>', "");
    }
</script>

<asp:LinkButton ID="docSaveBtn" runat="server" Text="Save"
    SkinID="linkButton_blue" OnClick="docSaveBtn_Click"
    OnClientClick="radconfirm('Are you sure?', eventFn, null ,null, null, ''); return false;" />

<telerik:RadWindowManager ID="RadWindowManager1" runat="server"></telerik:RadWindowManager>
  

C # — серверная часть

 protected void docSaveBtn_Click(object sender, EventArgs e)
{

}
  

Обновить

  1. Еще раз, события на стороне клиента должны выполняться, а не возвращаться. Вызывайте функцию напрямую, вместо того, чтобы писать return в начале.

  2. Как LinkButton, так и ImageButtons будут выполнять обратную отправку по умолчанию, и чтобы предотвратить это, вам нужно будет отменить событие. Внутри события ClientClick, сразу после вызова radconfirm() функции, напишите return false . Например. radconfirm("Something"); return false;

  3. Теперь появится всплывающее окно RadConfirm, и у вас есть возможность нажать «ОК» или «Отмена». При нажатии на OK приложение не будет знать, что делать дальше, если вы не используете функцию обратного вызова. Вам нужно будет добавить функцию обратного вызова в RadConfirm, которую вы можете использовать для выполнения обратной передачи вручную. Это описано в ссылке, которой я поделился выше.

Вот как должна быть настроена кнопка:

 <asp:ImageButton ID="imgDuplica" runat="server"
    ImageUrl="https://via.placeholder.com/40x20" OnClick="imgDuplica_Click" ToolTip="Duplica Gara"
    OnClientClick="radconfirm('Procedere alla duplicazione della gara?', thisIsMyCallBackFunction, null, null, null, ''); return false;" />
  

Функция обратного вызова:

 <script type="text/javascript">
    function thisIsMyCallBackFunction(confirmation) {
        if (confirmation == true) {
            __doPostBack('<%= imgDuplica.ClientID %>', "");
        }
    }
</script>
  

Кроме того, почему бы не использовать кнопки Telerik, которые поставляются со встроенной функцией диалога подтверждения?

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

1. Ваше решение работает только с элементами управления LinkButton ASPX. Если RadConfirm добавляется к любой другой кнопке, которую ASPX отображает как <input> , проблема сохраняется (поскольку у входных данных нет тега «href»). Большое вам спасибо, у вас есть какие-либо другие предложения?

2. Что ж, мой ответ нацелен на элемент управления, который вы упомянули в вопросе. Не могли бы вы, пожалуйста, более конкретно рассказать о других кнопках? Являются ли они кнопками ASP, кнопками Telerik, универсальными кнопками HTML. Вы хотите настроить таргетинг на несколько кнопок или на конкретные? Пожалуйста, обновите свой первоначальный вопрос, добавьте остальную информацию, и мы затем предложим соответствующие действия.

3. Спасибо вам за вашу поддержку на данный момент. Я обновил свой первоначальный вопрос