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

ASP.NET MVC下使用复合主键生成@Html.ActionLink编辑链接失败如何解决?

复合主键场景生成ActionLink的正确处理方式

你之前拼接主键的方式不生效的核心原因是:后台Edit方法默认需要匹配独立的主键参数,拼接后的单个字符串无法对应到数据库的两个主键字段做查询。

方案1(推荐):直接传递两个主键参数

前端视图代码调整

把ActionLink的路由参数直接传入两个主键字段,不需要封装为单个id:

@Html.ActionLink("Edit", "Edit", new { PoNo = Model.PoNo, ItemNo = Model.ItemNo })

生成的链接会自动携带两个参数,格式类似 /你的控制器名/Edit?PoNo=xxx&ItemNo=yyy

后端控制器代码调整

修改Edit动作的入参,直接接收两个主键字段即可:

public ActionResult Edit(int PoNo, int ItemNo)
{
    // 用两个主键匹配查询对应记录
    var targetItem = db.po_items.FirstOrDefault(i => i.PoNo == PoNo && i.ItemNo == ItemNo);
    if (targetItem == null)
    {
        return HttpNotFound();
    }
    return View(targetItem);
}

这个方案不需要额外做字符串拼接拆分,逻辑最直观,也不容易出格式错误。

方案2(特殊场景用):约定分隔符拼接为单个id

如果你的路由规则要求必须用单个id参数,可以用固定分隔符(比如下划线、中划线,不要用容易和数字混淆的字符)拼接两个主键值:

前端代码

@Html.ActionLink("Edit", "Edit", new { id = $"{Model.PoNo}_{Model.ItemNo}" })

后端代码

拿到id后拆分出两个主键值即可:

public ActionResult Edit(string id)
{
    var keyParts = id.Split('_');
    if (keyParts.Length != 2 || !int.TryParse(keyParts[0], out int poNo) || !int.TryParse(keyParts[1], out int itemNo))
    {
        return HttpNotFound();
    }
    var targetItem = db.po_items.FirstOrDefault(i => i.PoNo == poNo && i.ItemNo == itemNo);
    return View(targetItem);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:39:00