Подтверждение ASP.NET перед выполнением codebehind

У меня есть форма, в которой пользователь может удалить запись, и мне нужно всплывающее сообщение, в котором пользователь должен нажать "ОК", чтобы подтвердить удаление.

Кнопка удаления:

<asp:Button ID="btnDelete" runat="server" Text="Delete" UseSubmitBehavior="false" OnClick="btnDelete_Click" OnClientClick="confirmation();" />

Функция подтверждения:

function confirmation() {
        var answer = confirm("Are you sure you want to delete? This action cannot be undone.")
    }

Итак, прямо сейчас нажатие кнопки удаления запускает подпрограмму btnDelete_Click в коде позади независимо от того, нажали ли вы "ОК" или "Отмена" во всплывающем окне. Я знаю, что могу добавить if (answer) {- некоторый код здесь -} в мою функцию javascript, но возможно ли использовать javascript для выполнения кода из кода позади? Или есть другой способ сделать это?

Ответы

Ответ 1

Попробуйте сделать следующее. Вы должны вернуть результат функции подтверждения (true или false).

<asp:Button 
    ID="btnDelete" 
    runat="server" 
    Text="Delete" 
    UseSubmitBehavior="false" 
    OnClick="btnDelete_Click" 
    OnClientClick="return confirmation();" />

 

function confirmation() {
    return confirm("Are you sure you want to delete?");
}

Ответ 2

Поместите это в свой код aspx:

OnClientClick="return confirm('Are you sure you want to delete this project?');" 

Ответ 3

используйте этот образец:

<asp:Button ID="Button1" runat="server" Text="Button" OnClientClick="return ConfirmOnDelete();"/>

<script type="text/javascript">    
   function ConfirmOnDelete() {
    if (confirm("Do you really want to delete?") == true)
        return true;
    else
        return false;
   }
</script>

Ответ 4

Я знаю, что это старый пост, но вы можете поместить вышеупомянутые ответы в одну строку следующим образом. И вам даже не нужно писать функцию.

 <asp:Button runat="server" ID="btnDelete" Text="Delete" OnClick="btnDelete_Click" OnClientClick="if ( !confirm('Are you sure you want to delete ? ')) return false;"  />

Ответ 5

Мы можем легко сделать это с помощью ConfirmButtonExtender,

<ajaxToolkit:ConfirmButtonExtender ID="cbeDelete" TargetControlID="btnDelete" ConfirmText="Are you sure you want to delete? This action cannot be undone." runat="server">

Это очень просто...

Ответ 6

Если вы хотите исключить какой-либо код на стороне сервера, не отправляя сообщение назад, вы должны использовать ajax для этого.

function confirmation() {
        var answer = confirm("Are you sure you want to delete? This action cannot be undone.")
        if(answer)
        {
           $.post("ajaxserverpage.aspx?item=34",function(data){
              alert(data); 
          });
        } 
        return false; 
    }

и у вас есть страница с именем ajaxserverpage.aspx и на странице загрузки этой страницы, проверьте строку запроса и выполните соответствующий код на стороне сервера и верните некоторую строку

   protected void Page_Load(object sender, EventArgs e)
   {
        if (Request.QueryString["item"] != null)
        {
          // read the item and do your stuff here
         Response.Write("Deleted succssfully");
         Response.End();
        }
    }

Вы также можете использовать generic handler (.ashx) для обработки вашей стороны на стороне сервера ajax вместо файла .aspx. Я бы предпочел этот метод.

Ответ 8

Я думаю, что выше должно работать, если вы не можете использовать его с Button, попробуйте <asp:link button>. Шахта прекрасно работает.

Страница ASPX: -

<asp:LinkButton  ID="takeActionBtn" CausesValidation="false" runat="server" 
        onclientclick="return confirm('Do you really want to perform Action ?');"> Take Action </asp:LinkButton>

Код сервера VB: -

Protected Sub takeActionBtn_Click(ByVal sender As Object, ByVal e As EventArgs) Handles takeActionBtn.Click

End Sub

Одна вещь, которую я заметил, это то, что если вы используете элемент управления (ascx) внутри страницы, вам может потребоваться отключить/включить на странице или уровне управления AutoEventWireup="false" <%@ control in <%@ page

Удачи!!

Ответ 9

1) Дизайн формы

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script type = "text/javascript">
    function Confirm() {
        var confirm_value = document.createElement("INPUT");
        confirm_value.type = "hidden";
        confirm_value.name = "confirm_value";
        if (confirm("Do you want to save data?")) {
            confirm_value.value = "Yes";
        } else {
            confirm_value.value = "No";
        }
        document.forms[0].appendChild(confirm_value);
    }
</script>
</head>
<body>
<form id="form1" runat="server">
  <asp:Button ID="btnConfirm" runat="server" 
 OnClick = "OnConfirm" Text ="Raise Confirm" OnClientClick = "Confirm()"/>
</form>
</body>
</html>

2) Codebehind

public void OnConfirm(object sender, EventArgs e)
{
string confirmValue = Request.Form["confirm_value"];
if (confirmValue == "Yes")
{
this.Page.ClientScript.RegisterStartupScript(this.GetType(),"alert('You    clicked YES!')", true);
}
else
{
    this.Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('You clicked NO!')", true);
}
}

3) Когда вы нажмете кнопку подтверждения кнопки подтверждения, будет отображаться.

4) Если вы нажмете ok, то OK часть будет работать в коде еще не Part

5) Тот же метод в GRIDVIEW DELETE BUTTON.

Ответ 10

Вы можете просто поставить:

onclientclick = "return (window.confirm('text message'));

на странице ASPX, он делает то же самое.

Ответ 11

Если вы хотите, чтобы javascript получал доступ к методам в коде позади, вы всегда можете выставить их в службе RESTful.

$.ajax({
  url: 'url to the rest call',
  success: successfuntion(),
  dataType: 'text/json'
});

Попросите вызов REST выполнить любую логику и отправить некоторые данные, чтобы указать на успех. Затем просто используйте функцию success, чтобы удалить элемент из DOM.