如何解决ASP.NET MVC中Value cannot be null错误并跳过空值
解决ASP.NET MVC中访问
LabCultureResults.FirstOrDefault().TESTID的空引用错误 1. 控制器代码修改:加载关联的LAB_CULTURE_RESULT数据
原控制器未对Orders_Tables的LabCultureResults属性赋值,导致该集合为null,触发空引用错误。需要在查询时关联LAB_CULTURE_RESULT表,为该属性赋值(即使无数据,ToList()也会返回空集合而非null)。
修改后的控制器代码:
public ActionResult Clinicsorders(DateTime? startdate,DateTime? enddate, string pcfileno, string idno , string Passport , string Mobile) { int custId = (int)Session["UserCustid"]; var query = db.Lab_Orders.Where(r => r.CUSTID == custId) .Join(db.Lab_Sample_status, order => order.order_status, status => status.status_id, (order, status) => new { Order = order, Status = status }) .Join(db.Patients, rec => rec.Order.patient_no, patient => patient.Patient_No, (rec, patient) => new { rec.Order, rec.Status, patient }) .Select(x => new Orders_Tables { LabOrders = x.Order, LabOrderStatus = x.Status, patients = x.patient, // 关联加载当前订单对应的培养结果 LabCultureResults = db.LAB_CULTURE_RESULT.Where(cr => cr.ORDER_ID == x.Order.ORDER_ID).ToList() }); if (startdate.HasValue && enddate.HasValue) { query = query.Where(r => DbFunctions.TruncateTime(r.LabOrders.ORDER_DATE) >= DbFunctions.TruncateTime(startdate.Value) && DbFunctions.TruncateTime(r.LabOrders.ORDER_DATE) <= DbFunctions.TruncateTime(enddate.Value)); } if (!string.IsNullOrEmpty(pcfileno)) { query = query.Where(r => r.patients.PCfileNO == pcfileno); } if (!string.IsNullOrEmpty(idno)) { query = query.Where(r => r.patients.Patient_id == idno); } var model = query.OrderByDescending(r=>r.LabOrders.ORDER_ID).ToList(); return View(model); }
2. 视图代码修改:处理空值,避免空引用
原视图直接访问item.LabCultureResults.FirstOrDefault().TESTID,若集合为空或无匹配项,FirstOrDefault()返回null,访问TESTID会报错。需添加多层空值检查,同时在无数据时显示提示文本。
修改后的视图关键部分:
@model IEnumerable<AljawdahNewSite.Models.Orders_Tables> ... @foreach (var item in Model) { <tr> ... <td> @{ var cultureResult = item.LabCultureResults?.FirstOrDefault(); @(cultureResult != null && !string.IsNullOrEmpty(cultureResult.TESTID) ? cultureResult.TESTID : "无可用测试ID") } </td> ... @{ var cultureResultForLink = item.LabCultureResults?.FirstOrDefault(); if (cultureResultForLink != null && !string.IsNullOrEmpty(cultureResultForLink.TESTID)) { <td>@Html.ActionLink("培养结果下载", "download_culture", new { id = item.LabOrders.ORDER_ID, testid = cultureResultForLink.TESTID }, new { @class = "btn btn-primary", target = "_blank" })</td> } else { <td>无可用下载链接</td> } } ... </tr> }
内容的提问来源于stack exchange,提问作者MarwanAbu
相关产品推荐
相关产品推荐

