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

如何在邮件中添加链接以仅展示单条记录?附现有代码

实现邮件链接跳转到单条记录详情页的步骤及代码示例

没问题,我来一步步帮你实现这个功能,完全贴合你现有的ASP.NET MVC代码:


步骤1:在控制器中添加接收ID的GET Action

首先,在你的Ticket控制器(假设和EditOneRecord同属一个控制器)里新增一个ViewSingleTicket的GET方法,用来根据ID查询并返回单条记录:

// 假设你的控制器是TicketController
[HttpGet]
public ActionResult ViewSingleTicket(int id)
{
    using (DBModel db = new DBModel())
    {
        // 根据ID查询对应的Ticket记录(你的主键字段是iNumber,对应tix.iNumber)
        var ticket = db.Tickets.FirstOrDefault(t => t.iNumber == id);
        
        if (ticket == null)
        {
            // 如果找不到记录,返回404提示或跳转到首页
            return HttpNotFound("Ticket not found");
        }
        
        // 将记录传递给视图
        return View(ticket);
    }
}

注意:如果你的应用启用了身份验证,用户点击邮件链接后会先跳转到登录页,登录成功后会自动跳转回详情页。如果希望未登录用户也能访问这个页面,可以给这个Action加上[AllowAnonymous]特性。


步骤2:创建单条记录的详情视图

右键点击刚才的ViewSingleTicket方法,选择"添加视图",按以下配置生成:

  • 视图名称:ViewSingleTicket
  • 模板:详细信息(Details)
  • 模型类:Ticket(你的Ticket实体类)
  • 数据上下文类:DBModel

生成的视图会自动渲染Ticket的各个字段,你可以根据需求调整样式或删减字段,示例视图大概是这样:

@model YourNamespace.Ticket

@{
    ViewBag.Title = $"Ticket #{Model.iNumber} Details";
}

<h2>Ticket #@Model.iNumber Updated</h2>

<div class="ticket-details">
    <dl class="dl-horizontal">
        <dt>@Html.DisplayNameFor(model => model.vcAssignedTo)</dt>
        <dd>@Html.DisplayFor(model => model.vcAssignedTo)</dd>
        
        <dt>@Html.DisplayNameFor(model => model.dtLastUpdated)</dt>
        <dd>@Html.DisplayFor(model => model.dtLastUpdated)</dd>
        
        <!-- 这里添加你需要展示的其他字段,比如标题、描述等 -->
    </dl>
</div>
<p>
    @Html.ActionLink("Back to All Tickets", "Index")
</p>

步骤3:修改邮件内容,生成正确的绝对链接

回到你的EditOneRecord方法,修改邮件Body部分,用Url.Action生成绝对路径(邮件里的链接必须是完整URL,不能用相对路径):

if (userName != tix.vcAssignedTo)
{
    SmtpClient client = new SmtpClient();
    MailMessage mailMessage = new MailMessage();
    mailMessage.From = new MailAddress("nsantagata@fieldaero.com");
    mailMessage.To.Add("nsantagata@fieldaero.com");
    mailMessage.Subject = "Your Ticket Has Been Edited";
    
    // 生成完整的绝对链接:指定协议、域名,确保邮件里的链接可直接访问
    var ticketUrl = Url.Action(
        "ViewSingleTicket", 
        "Ticket", 
        new { id = tix.iNumber }, 
        Request.Url.Scheme, 
        Request.Url.Host
    );
    
    // 构造HTML格式的邮件内容,添加可点击链接
    mailMessage.Body = $"Your ticket {tix.iNumber} has been updated. <br><br>Click here to view the details: <a href='{ticketUrl}'>View Ticket #{tix.iNumber}</a>";
    // 必须开启HTML支持,否则链接会显示为纯文本
    mailMessage.IsBodyHtml = true;
    
    client.Send(mailMessage);
}

关键说明:Url.Action的最后两个参数Request.Url.Scheme(http/https)和Request.Url.Host(域名/IP)用来生成跨环境有效的完整URL,不管你的应用部署在测试还是生产环境,链接都能正常工作。


测试验证

  1. 编辑一条记录,触发邮件发送
  2. 打开邮件,点击链接,应该会直接跳转到ViewSingleTicket页面,展示这条被编辑的记录详情

如果遇到登录跳转的问题,用户登录后系统会自动回到详情页(ASP.NET MVC身份验证会保留ReturnUrl)。

内容的提问来源于stack exchange,提问作者N.Sant

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:09:22