You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP MVC5项目中SweetAlert确认/取消后Excel数据仍上传问题求助

问题分析与解决方案

看起来你遇到的核心问题是提交按钮的默认表单提交行为覆盖了SweetAlert的确认逻辑——不管用户点击确认还是取消,浏览器都会自动触发表单提交,导致数据上传操作执行。另外你的AJAX请求和控制器返回值的交互也有个小问题,我来一步步帮你解决:

1. 修复按钮的默认提交行为

首先要阻止按钮的默认提交动作,有两种方式可选:

方法一:修改按钮类型

把按钮明确设置为普通按钮(如果按钮在<form>标签内,浏览器默认会把它识别为提交按钮):

<button id="adminButton" type="button" class="btn btn-primary" autocomplete="off" data-loading-text="<i class='fa fa-spinner fa-spin '></i> Lecture en cours" onclick="ChargementDonnes()">

方法二:在JS中阻止默认事件

如果必须保留提交按钮类型,就在点击事件里添加阻止默认行为的代码:

function ChargementDonnes(event) {
    event.preventDefault(); // 阻止表单默认提交动作
    // 后续SweetAlert逻辑...
}

同时按钮的onclick需要传递事件参数:

<button id="adminButton" class="btn btn-primary" autocomplete="off" data-loading-text="<i class='fa fa-spinner fa-spin '></i> Lecture en cours" onclick="ChargementDonnes(event)">

2. 完善SweetAlert的取消逻辑

你的代码只处理了用户点击确认的情况,没有处理取消操作,需要补上取消回调:

function ChargementDonnes(event) {
    event.preventDefault(); // 用方法二时需要添加
    
    swal({
        title: "Etes vous sur",
        text: "Vous êtes sur le point de recharger tous les données de la base. Continuer ?",
        type: "warning",
        showCancelButton: true,
        confirmButtonColor: '#3085d6',
        confirmButtonText: "Oui",
        cancelButtonText: "Non",
        cancelButtonColor: '#d33',
        closeOnConfirm: true
    }).then(
        function() {
            // 用户点击确认时执行上传逻辑
            console.log("Appel de la méthode LoadData");
            $('#adminButton').button('loading');
            
            $.ajax({
                url: '/Home/LoadDatainShowIndex',
                type: 'GET',
                success: function (result) {
                    $('#adminButton').button('reset');
                    Swal({
                        title: "Succès !",
                        type: 'success',
                        showCancelButton: false,
                        confirmButtonClass: "btn-success",
                        confirmButtonText: "OK",
                        closeOnConfirm: true
                    }).then(() => {
                        // 手动跳转到Index页面(AJAX无法识别控制器的重定向)
                        window.location.href = '/Home/Index';
                    });
                },
                error: function(x, y, z) {
                    $('#adminButton').button('reset');
                    console.log(3);
                    SendMessageToUser('Chargement des données depuis Excel', 'erreur');
                }
            });
        },
        function() {
            // 用户点击取消时的反馈逻辑
            swal("Annulé", "Votre opération a été annulée", "info");
        }
    );
}

3. 修复控制器的返回值问题

你的控制器返回RedirectToAction("Index"),但AJAX请求无法自动处理重定向,需要调整控制器代码适配AJAX交互:

public ActionResult LoadDatainShowIndex() {
    try {
        LoadData();
        // 区分AJAX请求和普通请求,返回不同结果
        if (Request.IsAjaxRequest())
        {
            return Json(new { success = true }, JsonRequestBehavior.AllowGet);
        }
        return RedirectToAction("Index");
    } catch (Exception e) {
        if (Request.IsAjaxRequest())
        {
            Response.StatusCode = 500;
            return Json(new { error = e.Message }, JsonRequestBehavior.AllowGet);
        }
        Response.Write(e.Message);
        return null;
    }
}

同时在AJAX的错误回调里可以直接获取控制器返回的错误信息:

error: function(x, y, z) {
    $('#adminButton').button('reset');
    var errorMsg = x.responseJSON ? x.responseJSON.error : "Une erreur est survenue";
    SendMessageToUser(errorMsg, 'erreur');
}

总结

  • 核心问题是提交按钮的默认行为,必须阻止它才能让SweetAlert的确认逻辑生效
  • 补充取消操作的回调,给用户清晰的操作反馈
  • 调整控制器与AJAX的交互逻辑,解决AJAX无法识别重定向的问题

内容的提问来源于stack exchange,提问作者Mohammed Rasfa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 03:57:26