Несоответствие MVC между выходом контроллера и свойствами просмотра - PullRequest
1 голос
/ 29 февраля 2012

У меня очень простая структура EF (CodeFirst) в моем приложении MVC4.

В моем контроллере у меня есть этот простой запрос:

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] '. "

IЯ относительно новичок в MVC и EF (неприятная кривая обучения), любая помощь будет отличной.
Спасибо!

Ответы [ 2 ]

2 голосов
/ 01 марта 2012

Определите класс 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();

так что вы получите список и передадите его в качестве модели и сделаете с ним то, что вам нравится. Привет

0 голосов
/ 29 февраля 2012

Это потому, что вы генерируете анонимный тип, и это представление строго типизировано.По сути, вы создали новый тип, когда добавили поле «Электронная почта», и представление не знает, что с ним делать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...