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

通过JavaScript锚点调用带多参数的MVC控制器Action

解决方案

完全可以通过public IActionResult MEmail(string? id, string? type)来接收这两个参数,下面是具体的修改步骤:

1. 修改DataTables生成的锚点链接

在生成<a>标签的JavaScript代码里,直接在URL后面通过&type=xxx拼接第二个参数即可。如果邮件类型是固定值,可直接写死;如果是从DataTables行数据里动态获取的,就用${data.xxx}替换:

固定邮件类型示例:

<a href="/admin/user/mEmail?id=${data.id}&type=membership" class="btn btn-primary text-white" style="cursor:pointer; width:100px;">
    <i class="bi bi-send"></i>Email
</a>

动态获取邮件类型示例(假设行数据包含emailType字段):

<a href="/admin/user/mEmail?id=${data.id}&type=${data.emailType}" class="btn btn-primary text-white" style="cursor:pointer; width:100px;">
    <i class="bi bi-send"></i>Email
</a>

2. 更新控制器Action

修改MEmail方法的参数列表,添加string? type,然后根据传入的type值动态设置EmailVM的属性,用switch或if-else处理不同邮件类型即可:

public IActionResult MEmail(string? id, string? type)
{
    // 先获取目标用户
    var user = _unitOfWork.ApplicationUser.Get(u => u.Id == id);
    if (user == null)
    {
        // 处理用户不存在的情况,比如返回404或跳转提示页
        return NotFound();
    }

    EmailVM objVM = new EmailVM
    {
        SendTo = user.Email
    };

    // 根据type配置邮件内容
    switch (type?.ToLower())
    {
        case "membership":
            objVM.SendType = SD.EmailType_Membership;
            objVM.From = "Membership Management";
            objVM.MessageText = "Your membership application has been reviewed and will be approved when we receive your dues payment.";
            objVM.Subject = "Membership Application Processing";
            break;
        case "renewal":
            objVM.SendType = SD.EmailType_Renewal;
            objVM.From = "Membership Renewal Team";
            objVM.MessageText = "Your membership is about to expire. Please renew to continue enjoying our services.";
            objVM.Subject = "Membership Renewal Reminder";
            break;
        default:
            // 设置默认值,避免type为空或无效时出错
            objVM.SendType = SD.EmailType_Membership;
            objVM.From = "Membership Management";
            objVM.MessageText = "Your membership application has been reviewed and will be approved when we receive your dues payment.";
            objVM.Subject = "Membership Application Processing";
            break;
    }

    return View(objVM);
}

排查你之前修改失败的可能原因

  • 检查参数名一致性:URL里的type必须和控制器参数的type完全同名(大小写不敏感,但建议保持一致)
  • 如果type值包含特殊字符(空格、&等),需要用encodeURIComponent()编码,示例:
    const encodedType = encodeURIComponent(data.emailType);
    const href = `/admin/user/mEmail?id=${data.id}&type=${encodedType}`;
    
  • 确认DataTables行数据里确实包含你要传递的邮件类型字段,或固定值拼写无误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 14:47:16