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

ASP.NET Core MVC视图传控制器值异常:删除按钮无法传递ID

ASP.NET Core 删除操作ID传递为Null的排查与解决

以下是针对该问题的具体排查和解决步骤:

1. 核对控制器参数与视图绑定的匹配关系

  • 若控制器Delete方法参数为int id,需确保视图中隐藏输入的name属性值为id。如果使用ViewModel层级(如FormVM.Form.Id),可直接指定name而非依赖标签助手:
    <input type="hidden" name="id" value="@Model.Form.Id" />
    
  • 若坚持使用ViewModel接收参数,控制器方法需调整为接收对应ViewModel,并确认绑定属性正确:
    public IActionResult Delete(FormVM model)
    {
        var targetId = model.Form.Id;
        // 后续删除逻辑
    }
    
  • 可添加[FromForm]特性强制从表单取值,避免绑定源混乱:
    public IActionResult Delete([FromForm] int id)
    

2. 确认模型属性的可访问性

检查FormVM和Form模型的属性必须为public且包含读写器,否则绑定系统无法读取属性值:

public class FormVM
{
    public Form Form { get; set; } // 需public,带get/set
}

public class Form
{
    public int Id { get; set; } // 需public,带get/set
}

3. 检查视图表单结构

  • 确保隐藏输入和提交按钮都包裹在<form>标签内部,否则表单提交时不会携带该输入值:
    <form asp-action="Delete" method="post">
        <input asp-for="Form.Id" hidden />
        <button type="submit">Delete</button>
    </form>
    
  • 查看页面渲染后的HTML源码,确认隐藏输入的name和value属性是否正确生成(value应显示实际ID值,name需与控制器参数匹配)。

4. 排查模型绑定错误

在控制器Delete方法开头添加绑定状态检查,排查是否存在类型不匹配或绑定失败:

public IActionResult Delete(int id)
{
    if (!ModelState.IsValid)
    {
        var errors = ModelState.Values.SelectMany(v => v.Errors);
        // 输出错误信息排查问题
    }
    // 后续逻辑
}

5. 对比可正常运行的模型代码

逐行对比当前代码与可正常运行的模型:

  • 核对ViewModel的属性命名、嵌套层级
  • 检查视图中表单的asp-action、method配置
  • 确认控制器参数的类型、名称及绑定特性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 10:32:36