无法初始化ASP MVC3 ViewModel的列表属性

时间:2013-02-08 22:43:28

标签: asp.net-mvc asp.net-mvc-3 list icollection

下面是我们在我们正在构建的ASP MVC3站点中使用的两个ViewModel。在下面的代码中,我尝试填充名为TradingPartners的{​​{1}}变量的IList属性的AgentIdDetail AgentWithTraining属性。

为了更好地说明:

bigAgentbigAgent

AgentWithTraining有一个AgentWithTraining AgentIdDetail列表对象作为属性 ICollection的{​​{1}}列表对象名称为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; } }

有人可以解释我需要如何初始化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?)

1 个答案:

答案 0 :(得分:2)

您无法以这种方式初始化,因为AgentIdDetailsICollection<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);
}

作为一个很好的实践,我喜欢在构造函数上的ViewModel上初始化我的Collection属性,所以当我填充它时我不需要担心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>();
    }
}