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

Razor页面回传ClientId遇空值异常:技术解决方案问询

问题概述

基于.NET Core开发的Razor页面应用里,Client和Attendance(关联Panel)是一对多关系。创建Client后跳转至Create Panel并传递Client.Id、提交后返回Edit Client的流程都正常,但在Edit Client页面点击Panel的Edit/Delete按钮,编辑完成返回Edit Client时,出现ClientId传值为空的异常。

问题根源
  • Clients.Edit.cshtml里跳转至Attendances/Edit的链接重复使用asp-route-id属性,导致ClientId无法正确传递
  • Attendances.Edit.cs的OnGet方法只接收Attendance的Id,没接收并保存ClientId
  • 返回Edit Client时依赖未正确传递的ClientId值,导致跳转失败
解决方案

1. 修正跳转链接的路由参数

重复的asp-route-id会被覆盖,得用不同的路由参数名分别传递Attendance Id和Client Id,把Client Id用asp-route-clientId传递:

<a asp-page="/Attendances/Edit" class="btn btn-primary mx-2" 
   asp-route-id="@Model.Client.GetAttendees[i].Id" 
   asp-route-clientId="@Model.Client.GetAttendees[i].ClientId">
    编辑
</a>

2. 修改OnGet方法接收并保存ClientId

在OnGet方法里新增clientId参数,接收传递过来的Client Id,同时把它存到ViewData或者页面属性里,方便后续返回时调用:

public void OnGet(int id, int clientId)
{
    Attendance = _db.Attendance.Find(id);
    DisplayPanelData = _db.Panel.ToList();
    // 把ClientId存入ViewData
    ViewData["ClientId"] = clientId;
}

3. 修正返回跳转的参数

用保存好的ClientId跳转回Clients/Edit页面,确保参数正确:

return RedirectToPage("/Clients/Edit", new { id = ViewData["ClientId"] });

补充说明

虽然Attendance实体本身关联了ClientId,但直接通过路由参数传递更可靠,能避免延迟加载未触发导致的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 20:51:20