ASP.NET подтвердить перед выполнением кода - PullRequest
14 голосов
/ 23 марта 2012

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

Кнопка «Удалить»:

<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 для выполнения кода из кода позади?Или есть другой способ сделать это?

Ответы [ 11 ]

32 голосов
/ 23 марта 2012

Пожалуйста, попробуйте следующим образом. Вы должны вернуть результат функции подтверждения (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?");
}
10 голосов
/ 27 мая 2012

Вставьте это в свой код aspx:

OnClientClick="return confirm('Are you sure you want to delete this project?');" 
4 голосов
/ 15 августа 2014

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

 <asp:Button runat="server" ID="btnDelete" Text="Delete" OnClick="btnDelete_Click" OnClientClick="if ( !confirm('Are you sure you want to delete ? ')) return false;"  />
4 голосов
/ 23 марта 2012

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

<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>
3 голосов
/ 21 мая 2013

Мы можем легко сделать это, используя ConfirmButtonExtender,

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

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

0 голосов
/ 06 июля 2016

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

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

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

0 голосов
/ 17 июня 2014

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) Код позади

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 будет работать в коде, иначе No Part

5) Тот же метод в КНОПКА УДАЛЕНИЯ GRIDVIEW.

0 голосов
/ 17 марта 2014

Я думаю, что выше, должно работать, если вы не можете использовать его с кнопкой, попробуйте <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

Удачи !!

0 голосов
/ 23 марта 2012

Еще одним способом достижения этого было бы использование AJAX Toolkit ConfirmButton Extender, как показано здесь:

http://www.ezineasp.net/Samples/ASP-Net-AJAX-cs/Control-Toolkit/AJAX-ConfirmButton-Control/Default.aspx

0 голосов
/ 23 марта 2012

Если вы хотите извинить некоторый код на стороне сервера, не возвращая сообщение, вы должны использовать 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.Я бы предпочел этот метод.

...