2017-01-04 2 views
0

У меня есть форма, где у меня есть раскрывающийся список и много ярлыков. Когда я выбираю параметр из раскрывающегося списка, он извлекает данные из базы данных, связанные с этой опцией, и заполняет их в поле. Затем у меня есть кнопка удаления. Когда я нажимаю на это, то конкретное выбранное поле из списка будет удалено из базы данных. Для этого перед удалением, когда я нажимаю кнопку «Удалить», он запрашивает диалоговое окно подтверждения всплывающих окон, и когда я нажимаю «ОК», он будет удалять. Для этого я использую приведенный ниже код.Диалог подтверждения ASP.NET не работает во второй раз

JavaScript

<script type = "text/javascript"> 
    function Confirm() { 
     if (Page_ClientValidate()) { 
      var confirm_value = document.createElement("INPUT"); 
      confirm_value.type = "hidden"; 
      confirm_value.name = "confirm_value"; 
      if (confirm("You really want to delete the data?")) { 
       confirm_value.value = "Yes"; 
      } else { 
       confirm_value.value = "No"; 
      } 
      document.forms[0].appendChild(confirm_value); 
     } 
    } 
</script> 

C#

protected void button_delete_Click(object sender, EventArgs e) 
{ 
    string confirmValue = Request.Form["confirm_value"]; 
    if (confirmValue == "Yes") 
    { 
     // delete data from database 
    } 
} 

ASP.NET

<asp:Button ID="button_delete" Visible="false" Text="Delete" runat="server" OnClientClick="Confirm()" OnClick="button_delete_Click" /> 

Первоначально кнопка удаления является установлен на visible=false и только после выбора элемента из списка он становится видимым. Это влияет на диалог подтверждения после обратной передачи или что-то еще? Он работает в первый раз, и после того, как я перезагрузите страницу вручную и попробуйте, она работает. Но когда я делаю это непрерывно, не перезагружая страницу, он не будет работать во второй раз. В чем проблема?

+0

Есть ли ошибка в консоли браузера во второй раз? –

+0

вызов функции Confirm() в $ (document) .ready (function() {Confirm()}); и, пожалуйста, проверьте наличие ошибок в консоли браузера –

+0

Когда вы впервые запустите метод confirm(), добавьте скрытое поле в форму. со значением «Да» или «Нет» зависит от выбранного вами выбора. Затем, когда вы запустите метод confirm() второй раз, он добавит другое скрытое поле. Когда дело доходит до backend button_delete_click, Request.Form ["confirm_value"] может быть не таким, которого вы ожидаете. – Jonathon

ответ

1

Измените подтверждение, чтобы вернуть истинное или ложное значение в зависимости от условия.

function Confirm() { 

    var isFormValid = Page_ClientValidate(); 
    var isConfirmedByUser = confirm("You really want to delete the data?"); 

    //returns true when form is valid and user confirms action 
    return (isFormValid && isConfirmedByUser);    
} 

и изменить OnClientClick к

<asp:Button ID="button_delete" Visible="true" Text="Delete" runat="server" OnClientClick="return Confirm();" OnClick="button_delete_Click" /> 

когда Confirm() возвращает ложное значение OnClientClick он не должен делать постбэк.

+0

Я тоже пробовал это, но не работает. Может быть, я не пробовал, как и у, значит, я хотел бы отправить мне чистый код, используя мой вопрос? –

+0

Просто замените метод Confirm указанным выше и измените onClientClick button_delete на 'return Confirm();', который должен это сделать. Дайте мне знать, если это сработает. – Frogger

+0

ok давайте попробуем ... –

Смежные вопросы