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

ASP.NET MVC中Controller与JS通信异常 邮件发送提示不显示

问题根源

你现在的代码有三个核心问题,导致提示无法正常展示:

  • AJAX回调参数顺序完全写反:jQuery的$.ajax success回调三个参数固定顺序是(后端返回数据data, 状态字符串textStatus, jqXHR实例),你代码里把第二个参数命名为jqXHR、第三个命名为textStatus,实际你写的textStatus只是值为"success"的字符串,根本不存在.status、.statusText属性,自然读不到你设置的"Sent Successfully"文本。
  • 后端缺失核心发送逻辑:你SmtpClient代码块里只写了//EMAIL CODE的注释,没有调用smtp.Send(mm)执行实际的邮件发送操作,就算前端逻辑对,邮件也发不出去。
  • error回调存在未定义变量:错误回调里你打印日志用了data变量,但这个变量没有在error回调的参数列表里定义,会直接抛出JS异常,打断后续弹窗渲染逻辑。
    另外你用HttpStatusCodeResult返回500错误时,IIS默认会拦截非200响应,把你自定义的错误提示替换成默认的服务器错误文本,就算前端参数写对也拿不到自定义消息。
修复方案

1. 调整后端返回逻辑

不要靠HTTP状态码传业务提示,统一返回200状态的JSON结构,兼容性最好,同时补上缺失的邮件发送代码:

public ActionResult SendForm(string message)
{
    try
    {
        // 读取Web.config的SMTP配置
        SmtpSection smtpSection = (SmtpSection)ConfigurationManager.GetSection("system.net/mailSettings/smtp");
        using (MailMessage mm = new MailMessage("发件人邮箱地址", "收件人邮箱地址"))
        {
            mm.Subject = "你的邮件主题";
            mm.Body = message;
            mm.IsBodyHtml = true;
            using (SmtpClient smtp = new SmtpClient())
            {
                smtp.Send(mm); // 补上之前缺失的发送调用
            }
        }
        return Json(new { success = true, msg = "邮件发送成功" });
    }
    catch (SmtpException)
    {
        return Json(new { success = false, msg = "邮件发送过程中出现错误" });
    }
    catch (Exception)
    {
        return Json(new { success = false, msg = "请求处理发生异常" });
    }
}

2. 修正前端AJAX代码

直接读取后端返回JSON里的提示字段,修正参数和变量错误:

$.ajax({
    method: 'POST',
    cache: false,
    contentType: 'application/json',
    url: '@Url.Action("SendForm", "Index")',
    data: JSON.stringify(data),
    success: function (res) {
        clearAlertModal();
        if (res.success) {
            form.find('textarea').val('');
        }
        modal.find('div.special-alert').html(res.msg);
        modal.modal('show');
    },
    error: function (jqXHR, textStatus, errorThrown) {
        clearAlertModal();
        console.log('请求异常:', textStatus, errorThrown);
        modal.find('div.special-alert').html('网络请求失败,请稍后重试');
        modal.modal('show');
    }
});

如果你一定要用读取statusText的方式实现,首先要把success回调的参数顺序改对,自定义提示文本存在第三个参数(jqXHR实例)的statusText属性上;其次要在web.config里加配置关闭IIS的自定义错误拦截,否则500响应的自定义提示会被替换,维护成本远高于返回JSON结构的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 00:33:35