Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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 3 控制器输出和视图属性之间的MVC不匹配_Asp.net Mvc 3_Entity Framework - Fatal编程技术网

Asp.net mvc 3 控制器输出和视图属性之间的MVC不匹配

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.

我的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_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的集合。不过,可能有一种更聪明的方法。