2013-02-08 3 views
0

Ниже приведены две модели ViewModels, которые мы используем на сайте ASP MVC3, который мы создаем. В приведенном ниже коде, я пытаюсь заполнить свойство IList свойства AgentIdDetail переменной AgentWithTraining с именем bigAgent.Невозможно инициализировать свойство списка ASP MVC3 ViewModel

Чтобы лучше проиллюстрировать:

bigAgent является AgentWithTraining

AgentWithTraining имеет объект AgentIdDetailICollection списка как свойство AgentIdDetail имеют объект IList списка по имени TradingPartner

public class AgentWithTraining 
{ 
    public Monet.Models.Agent Agent { get; set; } 
    public ICollection<AgentProdTrainDetail> AgentProdTrainDetails { get; set; } 
    public ICollection<AgentIdDetail> AgentIdDetails { get; set; } 
} 

public class AgentIdDetail 
{ 
    public string AgentId { get; set; } 
    public string CompanyCode { get; set; } 
    public IList<string> TradingPartners { get; set; } 
} 

The проблемой является следующая строка кода:

bigAgent.AgentIdDetails = new AgentIdDetail(); 

Это дает мне ошибку:

Cannot implicitly convert type 'Monet.ViewModel.AgentIdDetail' to 'System.Collections.Generic.ICollection<Monet.ViewModel.AgentIdDetail>'. An explicit conversion exists (are you missing a cast?)

Может кто-нибудь объяснить, как мне нужно идти о инициализации bigAgent.AgentIdDetails? Ниже приведен полный раздел кода, который я использую, на всякий случай, который полезен.

 //Grab Trading partner information and add it to 'trainlist' object 
     List<AgentIdToTradingPartner>tradingParter = new List<AgentIdToTradingPartner>(); 

     var symNumToAgId = from s in db.SymetraNumberToAgentId 
          where s.SymetraNumber == id 
          select s; 

     //******************************************* 
     //This line is causing the problem 
     //******************************************* 
     bigAgent.AgentIdDetails = new AgentIdDetail(); 

     foreach (var s in symNumToAgId) 
     { 
      AgentIdDetail item = new AgentIdDetail(); 

      item.AgentId = s.AgentId; 
      item.CompanyCode = s.CompanyCode; 

      tradingParter = db.AgentIdToTradingPartner 
           .Where(r => r.AgentId == s.AgentId).ToList(); 

      item.TradingPartners = new List<string>(); 

      foreach (var t in tradingParter) 
      { 
       item.TradingPartners.Add(t.TradingPartner.ToString()); 
      } 

      bigAgent.AgentIdDetails.Add(item); 
     } 

ответ

1

Вы не можете initilize этот путь, потому что AgentIdDetails является ICollection<AgentIdDetail> и не один экземпляр AgentIdDetail.

Вам необходимо инициализировать коллекцию, а затем добавить новый элемент в эту коллекцию. Для образца:

// initilize as a List<AgentIdDetail> 
bigAgent.AgentIdDetails = new List<AgentIdDetail>(); 

foreach (var s in symNumToAgId) 
{ 
    AgentIdDetail item = new AgentIdDetail(); 

    item.AgentId = s.AgentId; 
    item.CompanyCode = s.CompanyCode; 

    tradingParter = db.AgentIdToTradingPartner 
         .Where(r => r.AgentId == s.AgentId).ToList(); 

    item.TradingPartners = new List<string>(); 

    foreach (var t in tradingParter) 
    { 
     item.TradingPartners.Add(t.TradingPartner.ToString()); 
    } 

    bigAgent.AgentIdDetails.Add(item); 
} 

Как хорошо pratice, мне нравится initilize своих свойств коллекции на ViewModels на конструкторе, так что мне не нужно беспокоиться о initilize, когда я заполняю его, если я не нужен новый, для образец:

public class AgentWithTraining 
{ 
    public Monet.Models.Agent Agent { get; set; } 
    public ICollection<AgentProdTrainDetail> AgentProdTrainDetails { get; set; } 
    public ICollection<AgentIdDetail> AgentIdDetails { get; set; } 

    public AgentWithTraining() 
    { 
     this.AgentProdTrainDetails = new List<AgentProdTrainDetail>(); 
     this.AgentIdDetails = new List<AgentIdDetail>(); 
    } 
} 
Смежные вопросы