大家好日子,
我在显示并不总是存在的数据方面遇到了麻烦。
<div class="display-label">client</div>
<div class="display-field">
@Model.Contact.client.nomCompteClient
</div>
<div class="display-label">civilite</div>
<div class="display-field">
@Model.Contact.civilite
</div>
在此代码中,如果未设置@ Model.Contact.client.nomCompteClient,则会收到以下错误:对象引用未设置为对象的实例。 但是,如果每个其他数据都是空的,则没有问题,只显示任何内容。 我不明白我为强制设置“nomCompteClient”做了什么。
这是我的控制器:
Function Details(id As Integer) As ActionResult
Dim contact As contact = db.contact.Single(Function(c) c.idContact = id)
Dim meetings = (From d In db.meeting
Where d.FK_meet_contact = id
Select d).ToList()
Dim opportunites = (From e In db.opportunite
From f In db.transmission_opportunite
Where f.FK_trans_cont = id And f.FK_trans_opp = e.idOpportunite
Select e).ToList()
Dim interviews = (From g In db.interview
Where g.FK_int_contact = id
Select g).ToList()
Dim model = New ContactDetails With {
.Contact = contact,
.Meetings = meetings,
.Interviews = interviews,
.Opportunites = opportunites
}
Return View(model)
End Function
这是我用过的模型
Public Class ContactDetails
Public Property Contact As contact
Public Property Meetings As IEnumerable(Of meeting)
Public Property Interviews As IEnumerable(Of interview)
Public Property Opportunites As IEnumerable(Of opportunite)
End Class
对不起,如果我的英语很糟糕,我不是母语为英语的人。
编辑: 我不被允许回答,所以我将使用我找到的“解决方案”进行编辑
我终于解决了这个问题:
<div class="display-field">
@If Model.Contact.FK_contact_client Then
@Model.Contact.client.nomCompteClient
End If
</div>
FK_contact_client是指联系人正在为之工作的客户的FK。
没有更好的可能吗?
答案 0 :(得分:3)
您的问题与ASP.NET MVC没有任何关系。这是关于对象引用的基本.NET问题。您已经设计了一个具有属性和子属性的对象层次结构。为了能够访问Model.Contact.client.nomCompteClient
,您需要首先初始化Contact
属性,然后初始化client
属性。
在这里,您似乎从数据库中获取联系人:
Dim contact As contact = db.contact.Single(Function(c) c.idContact = id)
确保在返回的对象中初始化client
属性,否则无法使用它。
例如:
@Model.Contact.civilite
这没有显示任何内容,因为Contact
属性不是null,而是civilite
属性,即使它为null或为空,您不再尝试在其上调用任何方法或属性。