我正在运行一个 ASP.NET MVC 3 应用程序 (C#)。
我最近在我的数据库中设置了一个可以为空的外键。这可能不是最佳实践,但它对我的场景是必要的。所以现在当我显示我的报告(ASPX 视图引擎)时,我在我的数据库中设置为空的对象的值将不会显示。
现在的数据结构(简化)如下:
Inventory
________________
InventoryID int PK
ShopID FK int NOT NULL
ProductID FK int NULL
对此的唯一更改是 ProductID 曾经是不可为空的。
我的 ActionResult 如下:
[HttpPost]
public ActionResult InventoryReport(FormCollection formVariables, InventoryReportRequest reportRequest)
{
ModelContainer ctn = new ModelContainer();
var query = ctn.Inventory.Where(ic => !ic.Deleted && ic.ShopID == reportRequest.ShopID);
if (reportRequest.ProductID.HasValue)
{
query = (from ic in query
where reportRequest.ProductID == ic.ProductID
select ic);
}
List<Inventory> checks = query.ToList();
if (checks.Count > 0)
{
return View(checks);
}
else
{
return RedirectToAction("Index");
}
}
当我通过此操作进行调试时,我可以看到正在检索 ProductID,但是 Product 对象仍然为空。所以当我想在我的视图中显示我的结果时 -
<table class="normal" width="100%">
<tr>
<th>
Date
</th>
<th>
Shop
</th>
<th>
**Product Name**
</th>
<th>
**Product ID**
</th>
<th>
Active
</th>
</tr>
<% foreach (var item in Model) { %>
<tr>
<td>
<%: Html.DisplayFor(modelItem => item.DateChecked) %>
</td>
<td>
<%: Html.DisplayFor(modelItem => item.Shop.Name) %>
</td>
<td>
**<%: Html.DisplayFor(modelItem => item.Product.Name) %>**
</td>
<td>
**<%: Html.DisplayFor(modelItem => item.Product.ProductID) %>**
</td>
<td>
<%: Html.DisplayFor(modelItem => item.Active) %>
</td>
</tr>
<% } %>
</table>
加星标的项目显示为空白。
任何人都可以就我需要做些什么来解决这个问题提供建议吗?如果需要更多信息,请询问:)