【问题标题】:Using SweetAlert2 to replace "return confirm()" on an ASP.Net Button使用 SweetAlert2 替换 ASP.Net 按钮上的“return confirm()”
【发布时间】:2017-06-23 20:24:02
【问题描述】:

在 ASP.Net 中工作时,我经常喜欢“你确定吗?”单击删除按钮之类的东西时弹出窗口。这很容易做到:

<asp:Button runat="server" id="btnDelete" Text="Delete" onClientClick="return confirm('Are you sure?');" onClick="btnDelete_Click" />

我真的很喜欢 SweetAlert2 确认对话框的样式和总体感觉,但是当我尝试以类似的方式集成它们时,它们似乎有点麻烦。有人可以向我解释一下我如何能够根据单击的按钮返回 SweetAlert2 对话框结果以继续或停止吗?

这是我目前所得到的:

<asp:Button runat="server" id="btnDelete" Text="Delete" onClientClick="return sweetAlertConfirm();" onClick="btnDelete_Click" />
    function sweetAlertConfirm() {
        event.preventDefault();
        swal({
            title: 'Are you sure?',
            text: "You won't be able to revert this!",
            type: 'warning',
            showCancelButton: true,
            confirmButtonColor: '#3085d6',
            cancelButtonColor: '#d33',
            confirmButtonText: 'Yes, delete it!'
//      }).then(function() {
//          CONFIRM WAS CHOSEN
//      }, {function() {
//          CANCEL WAS CHOSEN
        });
    }

对话框出现并且删除没有被处理,当然,因为我目前正在执行event.preventDefault() 并且没有返回任何内容。我还注意到I can use promises,在我的swal({...}) 之后添加了.then(),但是我不确定在这种情况下如何使用它。

如果需要,我可以使用实际触发代码隐藏方法的隐藏按钮变得棘手,并根据用户选择单击该隐藏按钮,但我希​​望避免这种情况。

【问题讨论】:

    标签: javascript asp.net sweetalert sweetalert2


    【解决方案1】:

    由于 SweetAlert2 对话框是异步处理的,因此当 promise 解决时,您必须以编程方式触发另一个按钮单击。无需创建隐藏按钮,您可以通过设置一个标志来重复使用btnDelete,以指示该操作已被确认。当第二次点击被处理时,该标志将被检测到,并且按钮点击将被允许继续并触发服务器事件。

    <asp:Button ... OnClientClick="return sweetAlertConfirm(this);" OnClick="btnDelete_Click" />
    
    function sweetAlertConfirm(btnDelete) {
        if (btnDelete.dataset.confirmed) {
            // The action was already confirmed by the user, proceed with server event
            btnDelete.dataset.confirmed = false;
            return true;
        } else {
            // Ask the user to confirm/cancel the action
            event.preventDefault();
            swal({
                title: 'Are you sure?',
                text: "You won't be able to revert this!",
                type: 'warning',
                showCancelButton: true,
                confirmButtonColor: '#3085d6',
                cancelButtonColor: '#d33',
                confirmButtonText: 'Yes, delete it!'
            })
            .then(function () {
                // Set data-confirmed attribute to indicate that the action was confirmed
                btnDelete.dataset.confirmed = true;
                // Trigger button click programmatically
                btnDelete.click();
            }).catch(function (reason) {
                // The action was canceled by the user
            });
        }
    }
    

    【讨论】:

      【解决方案2】:

      var obj = { status: false, ele: null };
      function DeleteConfirm(btnDelete) {
      
          if (obj.status) {
              obj.status = false;
              return true;
          };
      
          Swal.fire({
              title: 'Are you sure?',
              text: "You won't be able to revert this!",
              type: 'warning',
              showCancelButton: true,
              confirmButtonColor: '#3085d6',
              cancelButtonColor: '#d33',
              confirmButtonText: 'Yes, delete it!'
          }).then((result) => {
              if (result.value) {
                  obj.status = true;
                  //do postback on success
                  obj.ele.click();
      
                  Swal.fire({
                      title: 'Deleted!',
                      text: 'Your file has been deleted.',
                      type: 'success',
                      timer: 800
                  })
              }
          });
          obj.ele = btnDelete;
          return false;
      }
      <link href="https://cdn.jsdelivr.net/npm/sweetalert2@8/dist/sweetalert2.min.css" rel="stylesheet"/>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js">
      </script>
      <script src="https://cdn.jsdelivr.net/npm/sweetalert2@8/dist/sweetalert2.min.js"></script>
      
      <asp:LinkButton ID="cmdDelete" runat="server" CausesValidation="False" OnClientClick="return DeleteConfirm(this);">

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多