2012-03-09 3 views
1

Добрый день всем,Ссылка на объект не указывает на экземпляр 0f объекта

у меня возникают проблемы с показом данных, которые не всегда существует.

<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, что относится к клиенту, с которым работает контакт.

Не было ли лучшей возможности?

ответ

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 свойство не равно нулю, но civilite свойство, даже если он не является нулевым или опустошить вам больше не пытаться вызвать любой метод или свойство на нем.

+0

Думаю, я не смог понять себя, потому что не уверен, что вы поняли, что я пытался объяснить. Вид, который я показал, должен отображать информацию о контакте. Этот контакт может работать для клиента, но также может не работать ни на одного клиента. Таким образом, если клиентский объект не установлен, то контакт отсутствует. Как только у вас есть мнение, что «забывает» отображать это свойство? –

+0

@patxy, вы спрашиваете, почему вы получаете ошибку здесь '@ Model.Contact.client.nomCompteClient', но не здесь' @ Model.Contact.civilite'. Причина в том, что свойство 'client' равно null, и в первом случае вы пытаетесь вызвать на нем некоторое подзадачу, тогда как во втором вы не используете это свойство' client' вообще. –

+0

Ok thx, я отредактировал свой вопрос с помощью решения (мне не разрешили отвечать на мой вопрос -_-). –

Смежные вопросы