Asp.net mvc 3 控制器输出和视图属性之间的MVC不匹配
我的MVC4应用程序中有一个非常简单的EF(CodeFirst)结构 在我的控制器中,我有一个简单的查询:Asp.net mvc 3 控制器输出和视图属性之间的MVC不匹配,asp.net-mvc-3,entity-framework,Asp.net Mvc 3,Entity Framework,我的MVC4应用程序中有一个非常简单的EF(CodeFirst)结构 在我的控制器中,我有一个简单的查询: var activity = db.Activities.Where(a => a.Engagement.Id == Id); 我的视图可以毫无问题地处理此查询的结果 但是,在进行查询时,我需要将一个表连接到活动表。此查询适用于我: var activity = from a in db.Activities join m in db.
var activity = db.Activities.Where(a => a.Engagement.Id == Id);
我的视图可以毫无问题地处理此查询的结果
但是,在进行查询时,我需要将一个表连接到活动表。此查询适用于我:
var activity = from a in db.Activities
join m in db.Members on a.MemberID equals m.Id
where a.Engagement.Id == Id
select new
{
a.Description,
a.ActivityDate,
a.EngagementStageValue,
a.Hours,
m.Email,
};
问题是视图无法解释查询结果。我得到这个错误:
传递到字典的模型项的类型为“System.Data.Entity.Infrastructure.DbQuery1[f_uAnonymousType1
5[System.String,System.DateTime,System.Int32,System.Int32,System.String]]”,但此字典需要“System.Collections.Generic.IEnumerable`1[DomainClasses.Activity]”类型的模型项
我对MVC和EF(讨厌的学习曲线)比较陌生,任何帮助都会很好。谢谢 这是因为您正在生成一个匿名类型,而该视图是强类型的。基本上,当您添加“Email”字段时,您已经创建了一个新类型,而视图不知道如何处理它。定义一个具有所需属性的ActivityModel类,因此:
public class ActivityModel
{
public string Description {get; set;}
public DateTime ActivityDate {get; set;}
public yourtype EngagementStageValue {get; set;}
public DateTime Hours {get; set;}
public string Email {get; set;}
//you can also add new properties to get a cleaner view for an example
public string ActivityDateShort{
get{
return ActivityDate.ToShortDateString();
}
}
var activity = (from a in db.Activities
join m in db.Members on a.MemberID equals m.Id
where a.Engagement.Id == Id
select new ActivityModel
{
Description = a.Description,
ActivityDate = a.ActivityDate,
EngagementStageValue = a.EngagementStageValue,
Hours = a.Hours,
Email = m.Email,
}).ToList();
因此,您将获得一个列表,并将其作为模型传递给您的视图,然后对其执行您喜欢的操作。问候谢谢,我理解。附近有工作吗?如何修改视图以适应附加属性?通常我会创建一个添加附加字段的ViewModel。在您的情况下,它最终将成为ViewModels的集合。不过,可能有一种更聪明的方法。