【问题标题】:Unable to initialize list property of ASP MVC3 ViewModel无法初始化 ASP MVC3 ViewModel 的列表属性
【发布时间】:2013-02-08 22:43:28
【问题描述】:

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

为了更好地说明:

bigAgentAgentWithTraining

AgentWithTraining 有一个 AgentIdDetail ICollection 列表对象作为属性 AgentIdDetail 有一个名为 TradingPartnerIList 列表对象

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&lt;Monet.ViewModel.AgentIdDetail&gt;'. 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);
        }

【问题讨论】:

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


    【解决方案1】:

    您不能以这种方式初始化,因为AgentIdDetailsICollection&lt;AgentIdDetail&gt; 而不是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);
    }
    

    作为一个很好的做法,我喜欢在构造函数的 ViewModels 上初始化我的 Collection 属性,所以我不需要担心在填充它时初始化它,除非我需要一个新的作为示例:

    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>();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-11
      • 1970-01-01
      • 1970-01-01
      • 2021-01-09
      • 1970-01-01
      • 1970-01-01
      • 2020-07-12
      • 2018-06-16
      相关资源
      最近更新 更多