Asp.net mvc 无法初始化ASP MVC3 ViewModel的列表属性
下面是我们正在构建的ASP MVC3站点中使用的两个视图模型。在下面的代码中,我试图填充名为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
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=新列表();
}
}