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

Razor页面删除Panel后传递ClientId至Edit Client页面遇空值异常

解决方案

1. 修复删除视图的参数传递

在Delete Panel的视图页面(比如Delete.cshtml)中,添加隐藏字段存储关联的ClientId,确保提交删除请求时能把这个ID传给后台:

@model YourApp.Models.Panel

<form asp-action="Delete">
    <input type="hidden" asp-for="Id" />
    <!-- 新增隐藏字段传递ClientId -->
    <input type="hidden" asp-for="ClientId" />
    <div class="form-group">
        <p>确定要删除这个Panel吗?</p>
        <input type="submit" value="删除" class="btn btn-danger" />
        <a asp-action="Edit" asp-controller="Client" asp-route-id="@Model.ClientId" class="btn btn-secondary">取消</a>
    </div>
</form>

如果Panel模型未直接暴露ClientId,也可以通过导航属性获取:asp-route-clientId="@Model.Client.Id"

2. 调整后台删除动作的跳转逻辑

在Panel的Controller中,修改Delete的Post方法,删除成功后显式传入ClientId跳转回Edit Client页面:

[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id)
{
    var panel = await _context.Panel.Include(p => p.Client).FirstOrDefaultAsync(m => m.Id == id);
    if (panel == null)
    {
        return NotFound();
    }

    _context.Panel.Remove(panel);
    await _context.SaveChangesAsync();

    // 直接从panel实例获取关联的ClientId,显式跳转回Client的Edit页面
    return RedirectToAction("Edit", "Client", new { id = panel.ClientId });
}

关键是不要依赖上下文自动传递参数,必须明确指定id = panel.ClientId,确保跳转时携带有效的ClientId。

3. 验证模型关联配置

确认Panel模型中正确配置了与Client的外键关联:

public class Panel
{
    public int Id { get; set; }
    // 确保外键字段存在
    public int ClientId { get; set; }
    // 导航属性,方便获取关联的Client
    public Client Client { get; set; }
    // 其他Panel属性...
}

如果未配置ClientId外键,EF可能无法正确关联数据,导致删除时无法获取对应的ClientId。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 09:35:15