#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, вы можете мне помочь, как мне это сделать?