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
相关产品推荐
相关产品推荐

