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

如何解决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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 19:31:02