对象引用未设置为对象的实例

时间:2012-03-09 11:45:18

标签: vb.net asp.net-mvc-3

大家好日子,

我在显示并不总是存在的数据方面遇到了麻烦。

<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。

没有更好的可能吗?

1 个答案:

答案 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或为空,您不再尝试在其上调用任何方法或属性。