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
相关产品推荐
相关产品推荐

