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

