Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 无法初始化ASP MVC3 ViewModel的列表属性_Asp.net Mvc_Asp.net Mvc 3_List_Icollection - Fatal编程技术网

Asp.net mvc 无法初始化ASP MVC3 ViewModel的列表属性

Asp.net mvc 无法初始化ASP MVC3 ViewModel的列表属性,asp.net-mvc,asp.net-mvc-3,list,icollection,Asp.net Mvc,Asp.net Mvc 3,List,Icollection,下面是我们正在构建的ASP MVC3站点中使用的两个视图模型。在下面的代码中,我试图填充名为bigAgent的agentitdetail变量AgentWithTraining的TradingPartners属性 为了更好地说明: bigAgent是一种AgentWithTraining AgentWithTraining具有一个AgentDetailICollection列表对象作为属性 agentidetail有一个名为TradingPartner的IList列表对象 public class

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

为了更好地说明:

bigAgent
是一种
AgentWithTraining

AgentWithTraining
具有一个
AgentDetail
ICollection
列表对象作为属性
agentidetail
有一个名为
TradingPartner的
IList
列表对象

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; }
}
这给了我一个错误:

无法将类型“Monet.ViewModel.agentIDetail”隐式转换为“System.Collections.Generic.ICollection”。存在显式转换(是否缺少转换?

有人能解释一下我需要如何初始化
bigAgent.agentidetails
?下面是我正在使用的代码的完整部分,以防对您有所帮助

        //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);
        }
//获取交易伙伴信息并将其添加到“trainlist”对象
ListtradingParter=新列表();
var symNumToAgId=从s到db.SymetraNumberToAgentId
其中s.SymetraNumber==id
选择s;
//*******************************************
//这条线路导致了问题
//*******************************************
bigAgent.agentIDetails=新的agentIDetail();
foreach(在symNumToAgId中的变量s)
{
agentId详细信息项=新建agentId详细信息();
item.AgentId=s.AgentId;
item.CompanyCode=s.CompanyCode;
tradingParter=db.agentToTradingPartner
其中(r=>r.AgentId==s.AgentId).ToList();
item.TradingPartners=新列表();
foreach(交易方的var t)
{
item.TradingPartners.Add(t.TradingPartner.ToString());
}
bigAgent.agentidetails.Add(项);
}

您不能以这种方式初始化,因为
agentidetails
i集合
而不是
agentidetails
的单个实例

您必须初始化集合,然后在此集合上添加新项。对于示例:

// 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);
}
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>();
    }
}
//初始化为列表
bigAgent.agentIDetails=新列表();
foreach(在symNumToAgId中的变量s)
{
agentId详细信息项=新建agentId详细信息();
item.AgentId=s.AgentId;
item.CompanyCode=s.CompanyCode;
tradingParter=db.agentToTradingPartner
其中(r=>r.AgentId==s.AgentId).ToList();
item.TradingPartners=新列表();
foreach(传统parter中的var t)
{
item.TradingPartners.Add(t.TradingPartner.ToString());
}
bigAgent.agentidetails.Add(项);
}
作为一个很好的实践,我喜欢在构造函数上初始化ViewModels上的集合属性,因此在填充时不必担心初始化,除非我需要一个新的示例:

// 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);
}
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>();
    }
}
公共类代理培训
{
public Monet.Models.Agent代理{get;set;}
公共ICollection代理ProdTrainDetails{get;set;}
公共ICollection agentId详细信息{get;set;}
公共机构培训()
{
this.AgentProdTrainDetails=新列表();
this.agentIDetails=新列表();
}
}