我如何解決這個錯誤:
Value cannot be null
這是模型:
public class Orders_Tables
{
// internal IQueryable<object> result { get; set; }
public Lab_Orders LabOrders { get; set; }
public Lab_orders_Cash LabOrdersCash { get; set; }
public Lab_Sample_status LabOrderStatus { get; set; }
public IEnumerable<LAB_RESULTS> LabResults { get; set; }
public IEnumerable<TestsRanges> testsRanges { get; set; }
public IEnumerable<TestsUnits> testUnits { get; set; }
public IEnumerable<LAB_CULTURE_RESULT> LabCultureResults { get; set; }
public IEnumerable<LAB_MICRO_NEGATIVE_RESULT> LabMicroResults { get; set; }
public IEnumerable<LabTests> labtests { get; set; }
public IEnumerable<LAB_RESULTS_CLINIC_VIEW> labClinicsViewResult { get; set; }
public IEnumerable<LAB_RESULT_CASH_VIEW> labCashView { get; set; }
public IEnumerable<LAB_PARASITOLOGY_VIEW> LabParasitologyView { get; set; }
public IEnumerable<LAB_CULTURES_VIEW> LabCulturesView { get; set; }
public IEnumerable<LAB_MICRO_VIEW> LabMicroView { get; set; }
public IEnumerable<LAB_HISTOPATHOLOGY_VIEW> LabHistopathologyView { get; set; }
public IEnumerable<LAB_HISTO_RESULT> LabHistoResult { get; set; }
public IEnumerable<LAB_PARA_RESULTS> LabParaResult { get; set; }
public Lab_Hematology_Samples LabSamples { get; set; }
public IEnumerable<LAB_URINE_ANALYSIS_RESULT> LabUrineResult { get; set; }
public IEnumerable<LAB_URINE_RESULT_VIEW> LaburineView { get; set; }
public Patients patients { get; set; }
public IEnumerable<Customers> customers { get; set; }
}
這是我使用 Model.order_table 的視圖:
@model IEnumerable<AljawdahNewSite.Models.Orders_Tables>
@{
ViewBag.Title = "Clinics Orders";
//Layout = "~/Views/Shared/_LayoutPatients.cshtml";
}
<link rel="stylesheet" [email protected]("/Content/bootstrap.min.css")>
<link rel="stylesheet" [email protected]("/Content/style.css")>
<li><img width="500" height="100" style="margin-left:300px" src="~/Contents/images/mamlakaheader.png" /> <a href="~/Views/Orders/Clinicsorders.cshtml"></a></li>
<li style="margin-left:1200px"><a [email protected]("Logout", "Login")><span class="d-inline-block bg-primary text-white btn btn-primary">Logout - ????? ?????? </span></a></li>
<li style="margin-left:500px"> @Html.ActionLink("Welcome " Session["UserFullname"], "Clinicsorders", "Orders") </li>
<h3 style="text-align:center;color:coral;padding:10px;margin-left:500px">Orders List</h3>
<style> a {color: brown;text-decoration: wavy;text-shadow: 20px;font-size:medium;} a:hover {color: blue;}</style>
@using (Html.BeginForm("Clinicsorders", "Orders", FormMethod.Get))
{
<div class="vertical-top">
<span id="FromDate" style="margin-left:60px;color:red;font-size:large"><b>From Date</b></span><input id="FromDatetext" style="margin-left:10px" type="text" name="startdate" />
<span id="ToDate" style="margin-left:95px;color:red;font-size:large"><b>To Date</b></span><input id="ToFatetext" type="text" style="margin:10px" name="enddate" /><br /><br />
<span id="PCfileno" style="color:red;font-size:large"><b>Polyclinic File No</b></span><input id="PCFILENOTEXT" style="margin-left:10px" type="text" name="pcfileno" />
<span id="IDNO" style="color:red;font-size:large;margin-left:30px"><b>ID or Iqama No</b></span><input id="idnotext" type="text" style="margin:10px" name="idno" />
<span id="passport" style="color:red;font-size:large"><b>Passport No</b></span><input id="passporttext" style="margin-left:10px" type="text" name="Passport" />
<span id="mobile" style="color:red;font-size:large;margin-left:30px"><b>Mobile No</b></span><input id="mobiletext" type="text" style="margin:10px" name="Mobile" />
<input id="Submit1" type="submit" value="Search" class="btn btn-dark" />
</div>
}
<table class="table">
<tr>
<td> Patient Name </td>
<td> Order No. </td>
<td> Test Id</td>
<td> order date </td>
<td> Polyclinic File </td>
<td> Order Status </td>
</tr>
@foreach (var item in Model)
{
<tr>
<td>@item.patients.Patient_Name</td>
<td>@item.LabOrders.ORDER_ID</td>
<!--Here is one-->
<td>@(item.LabCultureResults?.FirstOrDefault()?.TESTID.HasValue ? item.LabCultureResults?.FirstOrDefault()?.TESTID : "No Test ID" )</td>
<td>@item.LabOrders.ORDER_DATE</td>
<td>@item.patients.PCfileNO</td>
<td>@item.LabOrderStatus.status_name</td>
<td>@Html.ActionLink("Result", "MasterDetails", new { id = item.LabOrders.ORDER_ID },new { @class = "btn btn-primary" , target = "_blank" })</td>
<td>@Html.ActionLink("Invoice", "Index", "Invoice", new { id = item.LabOrders.ORDER_ID }, new { @class = "btn btn-primary", target = "_blank" })</td>
@if (item.LabCultureResults?.FirstOrDefault()?.TESTID)
{
<!--Here is two (Do not render if TESTID has not a value)-->
<td>@Html.ActionLink("Culture Result", "download_culture", new { id = item.LabOrders.ORDER_ID, testid = item.LabCultureResults.FirstOrDefault().TESTID }, new { @class = "btn btn-primary", target = "_blank" })</td>
}
@*<td>@Html.ActionLink("Culture Result", "download_culture", new { id = item.LabOrders.ORDER_ID,testid = item.LabCultureResults.FirstOrDefault().TESTID }, new { @class = "btn btn-primary", target = "_blank" })</td>*@
</tr>
}
</table>
當我添加 TESTID 時,此行出現錯誤
<td>@item.LabCultureResults.FirstOrDefault().TESTID</td>
如果可用,如何顯示 TESTID 并在 null 時跳過?
這是控制器代碼:
public ActionResult Clinicsorders(DateTime? startdate,DateTime? enddate, string pcfileno, string idno , string Passport , string Mobile)
{
int custId = (int)Session["UserCustid"];
// eager load navigation properties
// query is IQueryable
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 Orders_Tables { LabOrders = rec.Order, LabOrderStatus = rec.Status, patients = patient });
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);
}
我需要對控制器代碼進行更改并添加表,訂單表類包括一個模型中的所有表
uj5u.com熱心網友回復:
我在您的代碼中發現了另一個問題。您的頁面中有兩個訪問器TESTID。他們在下面的代碼上做了標記。您必須處理這兩個訪問器。可能是你的item或者LabOrders是null。如果沒有,下面的代碼可以完成這項作業。
如果條件取決于它自己的型別。
例如,如果TESTID是 int?你可以使用這個:
item.LabCultureResults?.FirstOrDefault()?.TESTID.HasValue
<table class="table">
<tr>
<td> Patient Name </td>
<td> Order No. </td>
<td> Test Id</td>
<td> order date </td>
<td> Polyclinic File </td>
<td> Order Status </td>
</tr>
@foreach (var item in Model)
{
<tr>
<td>@item.patients.Patient_Name</td>
<td>@item.LabOrders.ORDER_ID</td>
<!--Here is one-->
<td>@(item.LabCultureResults?.FirstOrDefault()?.TESTID.HasValue ? item.LabCultureResults?.FirstOrDefault()?.TESTID : "No Test ID" )</td>
<td>@item.LabOrders.ORDER_DATE</td>
<td>@item.patients.PCfileNO</td>
<td>@item.LabOrderStatus.status_name</td>
<td>@Html.ActionLink("Result", "MasterDetails", new { id = item.LabOrders.ORDER_ID },new { @class = "btn btn-primary" , target = "_blank" })</td>
<td>@Html.ActionLink("Invoice", "Index", "Invoice", new { id = item.LabOrders.ORDER_ID }, new { @class = "btn btn-primary", target = "_blank" })</td>
@if(item.LabCultureResults?.FirstOrDefault()?.TESTID.HasValue)
{
<!--Here is two (Do not render if TESTID has not a value)-->
<td>@Html.ActionLink("Culture Result", "download_culture", new { id = item.LabOrders.ORDER_ID,testid = item.LabCultureResults.FirstOrDefault().TESTID }, new { @class = "btn btn-primary", target = "_blank" })</td>
}
</tr>
</table>
uj5u.com熱心網友回復:
FirstOrDefault 如果不存在則回傳..default,因此取消參考將生成空參考例外
編輯:如果 TESTID 不存在則額外
@item.LabCultureResults.FirstOrDefault().TESTID ?? “空的”
快速解決方法是使用空合并運算子 (?)
@item.LabCultureResults.FirstOrDefault()?.TESTID ?? "EMPTY"
或者
@item.LabCultureResults.FirstOrDefault() ?? "EMPTY"
uj5u.com熱心網友回復:
以上答案的組合:
嘗試:
@item?.LabCultureResults.FirstOrDefault()?.TESTID ?? ""
uj5u.com熱心網友回復:
演示問題的示例代碼:
List<string> LabCultureResults = null;
Console.WriteLine(LabCultureResults.Count); // (1)
Console.WriteLine(LabCultureResults.FirstOrDefault()); // (2)
(1) 拋出臭名昭著的 NullReferenceException(“物件參考未設定為物件的實體。”)。
(2) 拋出帶有訊息“Value cannot be null. (Parameter 'source')”的 ArgumentNullException,因為可以對 null 值呼叫擴展方法(如 FirstOrDefault),但可能決定不接受它。
所以你的 LabCultureResults 是null.
當該模型是物體框架查詢的結果時,您需要.Include(it => it.LabCultureResults).
請注意,它FirstOrDefault()可能會回傳 a null,因此不要只獲取結果的 TESTID - 當結果為 null 時會拋出 NullReferenceException 。所以使用item.LabCultureResults?.FirstOrDefault()?.TESTID.
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/515589.html
上一篇:巨大的NSImage記憶體泄漏
