控制器输出和视图属性之间的MVC不匹配

时间:2012-02-29 17:47:47

标签: 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.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.DbQuery 1[<>f__AnonymousType1 5 [System.String,System.DateTime,System.Int32,System.Int32, System.String]]',但是这个字典需要一个类型为'System.Collections.Generic.IEnumerable`1 [DomainClasses.Activity]'的模型项。“

我对MVC和EF(讨厌的学习曲线)相对较新,任何帮助都会很棒 谢谢!

2 个答案:

答案 0 :(得分:2)

定义一个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();

因此您将获得一个List并将其作为模型传递给您的视图并使用它执行您喜欢的操作。此致

答案 1 :(得分:0)

这是因为您正在生成匿名类型,并且该视图是强类型的。基本上,当您添加“电子邮件”字段并且视图不知道如何处理它时,您已创建了一个新类型。