2017-02-23 26 views
-1

У меня возникли проблемы с этим. Я пытаюсь добавить объект viewmodel для ICollection объектов viewmodel ...ICollection в Viewmodel, вызывающем исключение Null Reference

Это дает исключение ссылки. Вот внутреннее исключение.

System.NullReferenceException occurred 
    HResult=0x80004003 
    Message=Object reference not set to an instance of an object. 
    Source=<Cannot evaluate the exception source> 

Его говоря, что это не может оценить источник исключения ....

У меня есть ViewModel:

public class ClientJobListingViewModel 
{ 
    public int Id { get; set; } 
    public string JobType { get; set; } 
    public string Status { get; set; } 
    public string WarrantyStatus { get; set; } 
    public string NumberOfVisits { get; set; } 
} 

, который добавляется к объекту в виде набора ViewModels:

public class ClientDetailsViewModel 
{ 
    ... 
    public ICollection<ClientJobListingViewModel> Jobs { get; set; } 
} 

Я использую цикл foreach для создания viewmodel, а затем добавьте его в коллекцию ... просто.

if (_client.Jobs.Count() > 0) 
{ 
    foreach (Job job in _client.Jobs) 
    { 
      var _job = new ClientJobListingViewModel(); 

      _job.JobType = "test1"; 
      _job.Status = "test2"; 
      _job.WarrantyStatus = "test3"; 
      _job.NumberOfVisits = "4"; 

      _model.Jobs.Add(_job); 
      } 
    } 
.... 

Но когда я запускаю это я получаю ошибку пустого ссылка исключение ..

Showing that the view model is not null.

Похоже, я правильно закодированы это, но, может быть, я пропустил что-то .. Visual Studio, конечно, так думает ..

Что я делаю неправильно?

+0

'собственности _model.Jobs' должны быть инициализированы перед выполнением' _model.Jobs.Add (_job) '. – ekad

+0

'ICollection' - это интерфейс. Сначала нужно инициализировать «List » и добавить к нему элемент и назначить этот список свойству «Jobs» (а 'ICollection' даже не имеет метода« Добавить »). Но почему бы просто не сделать свойство 'List ' в первую очередь? –

ответ

2

Вы должны инициализировать Jobs свойство в ClientDetailsViewModel конструктора или перед использованием _model.Jobs.Add(_job);

public class ClientDetailsViewModel 
{ 
    public ClientDetailsViewModel() 
    { 
     Jobs = new List<ClientJobListingViewModel>(); 
    } 
    public ICollection<ClientJobListingViewModel> Jobs { get; set; } 
} 
+0

Боже, это меня натолкнуло на целую вечность, и я знал, что это просто. Теперь это работает. – si2030

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