我有3张桌子。 Vlan,IPNets和设备
Vlans与IPNets有一对多的关系,而且Equipments与IPNets有一对多的关系。
在我对Vlans的详细信息视图中,我有这个foreach。
@foreach (var item in Model.IPNets)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Equipment.Description)
</td>
<td>
@Html.DisplayFor(modelItem => item.IPAddresse)
</td>
<td>
@Html.DisplayFor(modelItem => item.Equipment.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Equipment.EquipmentTypes.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Equipment.Departments.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Equipment.Location)
</td>
<td>
@if (item.Equipment.PacsId == 1)
{
<small class="label bg-green">PACS</small>
}
}
模型项目工作正常并生成一个表格,其中IPNets中的alle项目与Vlans的关系相匹配。
问题是if语句。因为现在我得到“对象未设置为对象的实例”。
使用item.EquipmentId这是IPNets中的外键正在工作,但不是我想要使用的属性。
使用@if(modelItem =&gt; item.Equipment.PacsId == 1)会出错:无法将lambda表达式转换为'bool'类型,因为它不是委托类型
视图模型
public class VlansViewModel
{
public int VlanId { get; set; }
public string Zone { get; set; }
public string Number { get; set; }
public string VlanName { get; set; }
public string Info { get; set; }
public string IPNet { get; set; }
public string IPStart { get; set; }
public string IPEnd { get; set; }
public string Mask { get; set; }
public string Gateway { get; set; }
public Location? Location { get; set; }
public string Cidr { get; set; }
public virtual ICollection<IPNet> IPNets { get; set; }
public virtual IEnumerable<Equipment> Equipments { get; set; }
public VlansViewModel(Vlan vlan)
{
VlanId = vlan.VlanId;
Zone = vlan.Zone;
Number = vlan.Number;
VlanName = vlan.Name;
Info = vlan.Info;
IPNet = vlan.IPNet;
IPStart = vlan.IPStart;
IPEnd = vlan.IPEnd;
Mask = vlan.Mask;
Gateway = vlan.Gateway;
Cidr = vlan.Cidr;
IPNets = vlan.IPNets;
Location = vlan.Location;
}
}
控制器
// GET: Vlans/Details/5
public ActionResult Details(int? id)
{
// Get current Id
var vlansid = db.Vlans.Find(id);
//ViewModel
var ViewModel = new VlansViewModel(vlansid);
return View("Details", ViewModel);
}
有关如何在if语句中使用item.Equipment.PacsId的任何建议吗?
正如Shyju指出的那样,当包含if语句时,Equipment属性确实为null。但是,当Vlans与它没有关系时,我只是不明白如何包含该属性。
我想我需要在控制器中进行查询,其中包括EquipId等于IPNets.EquipmentId的设备,但是我已经试图解决这个问题很长时间了,所有事情都开始融合成一个大模糊。< / p>
我也不明白为什么modelItem =&gt; item.Equipment.PacsId正在加载正确的值,但item.Equipment.PacsId为null。我是新手,如果有人能给出简短的解释,我将不胜感激。
答案 0 :(得分:1)
检查是否为null,如果不为null则继续:
@if (item.Equipment != null && item.Equipment.PacsId == 1)