Как создать эту модель в ASP.NET MVC3?

#asp.net-mvc #asp.net-mvc-3

#asp.net-mvc #asp.net-mvc-3

Вопрос:

Я совсем новичок в ASP.NET Фактически, это мой первый проект, использующий MVC. Я хочу создать простой список задач. Я довольно хорошо разбираюсь в ASP.NET но почти ничего не знаю о ASP.NET MVC или Linq поэтому, пожалуйста, имейте это в виду при ответе.

Я использую CodeFirst Entity Frameword для генерации Db.

У меня есть две таблицы Users (идентификатор, имя) и Tasks (идентификатор, идентификатор пользователя, имя).Я создал два объекта модели, которые содержат свойства пользователей и задач. Итак, вместо того, чтобы использовать int userId в качестве дизайна базы данных, я бы предположил, что у меня есть класс User внутри класса Task для подключения Task к определенному пользователю.

Каким-то образом мне удалось создать join с помощью LINQ

    var model = from t in _db.Tasks
                join u in _db.Users on t.User.ID equals u.ID
                select new { UserID = u.ID,UserName = u.Name,t.Name,t.ID };
    return View(model);
  

но я не могу привязать ее к представлению, я привязал ее к модели задачи, которая, вероятно, вызывает эту ошибку.

Как мне решить эту проблему, может быть, мне нужно создать какую-то ViewModel или что-то в этом роде?

Спасибо…

Ответ №1:

Вы должны создать ViewModel и передать его вашему представлению:

 public class TaskViewModel
{
    public int TaskId { get; set; }
    public string TaskName { get; set; }
    public int UserId { get; set; }
    public int Username { get; set; }
}
  

Чем создавать строго типизированное представление:

 @model IEnumerable<YourNamespace.Models.TaskViewModel>
//Display model data
  

И запрос Linq:

 var model = from t in _db.Tasks
            join u in _db.Users on t.User.ID equals u.ID
            select new TaskViewModel
            {
                TaskId = t.ID,                    
                TaskName = t.Name,
                UserId = u.ID,
                Username = u.Name
            };
  

Ответ №2:

Ваш запрос Linq использует то, что называется отложенным выполнением. Это означает, что сам запрос не содержит записей, и вы должны что-то сделать с ним, чтобы заставить его выполняться.

Итак, попробуйте это:

 return View(model.ToList());
  

Комментарии:

1. @model IEnumerable<Список задач. Модели. Задача>, Задачи не содержат User.Name . Должен ли я создать ViewModel?

2. @eugeneK — Да, вы захотите создать ViewModel того, что возвращает ваш запрос, и чтобы ваше представление использовало эту виртуальную машину.

3. Да, вам придется создать viewmodel, чтобы иметь возможность объединять данные подобным образом.

4. и @klabranche, вы можете мне помочь, как мне это сделать?