Передача неправильного элемента модели для просмотра

#c# #asp.net-mvc #entity-framework

Вопрос:

Я пытаюсь использовать две таблицы в одном представлении в своем asp.net mvc проекте, но я делаю некоторые ошибки, и я получаю эту ошибку:

Система.Исключение InvalidOperationException: Элемент модели, переданный в словарь, имеет тип ‘System.Data.Entity.Инфраструктура.DbQuery 1[Question] , но для этого словаря требуется элемент модели типа «Система».Коллекции.Общий.IEnumerable 1[projet.Models.userdbcontext]

Класс Questions.cs :

 public class Question
    {
        public int Id { get; set; }
        public int userID { get; set; }
            
    }
 

Класс User.cs :

 public class User
    {
        

        public int Id { get; set; }
        public string Email { get; set; }
        public string Password { get; set; }
        public string Name { get; set; }
    }
 

Модель userdbcontext.cs :

 {
        public userdbcontext()
        { }
        public DbSet<Question> Questiondb { get; set; }
        public DbSet<User> Usersdb { get; set; }
    }
 

а это контроллер:

  private userdbcontext db = new userdbcontext();
        // GET: question
        public ActionResult Index()
        {
            var l = from e in db.Questiondb
                    select e;
            return View(l);
        }
 

Вид:

 @model IEnumerable<projet.Models.userdbcontext>
 

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

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

2. Я попробовал что-то вроде: var l = from e in db.Questiondb from ee in db.UsersDb where e.Id != null amp;amp; ee.Id != null select new userdbcontext { Questiondb =e , UsersDb =ee} return View(l); но у меня получилось : cannot implicitly convert type 'projet.Models.Question' to 'System.Data.Entity.DbSet<projet.Models.Questions>'

Ответ №1:

ваша ошибка заключается в том, что вы пытаетесь отправить DbSet<> представление, которым трудно управлять, поэтому для решения проблемы вам необходимо создать новый класс ViewModel , в котором вы храните значение DbSet<> , а List<> затем передаете его в представление следующим образом :

Модель userdbcontext.cs:

 public class userdbcontext : DbContext
    {
        public userdbcontext()
        { }
        public DbSet<Question> Questiondb { get; set; }
        public DbSet<User> Usersdb { get; set; }
    }
    public class ViewModel
    {
        public List<Question> Question { get; set; }
        public List<User> User { get; set; }
    }
 

В контроллере:

 private userdbcontext db = new userdbcontext();
        // GET: question
        public ActionResult Index()
        {
            var l = new ViewModel();
            l.Question = db.Questiondb.ToList();
            l.User = db.Usersdb.ToList();
            
            return View(l);
        }
 

и в представлении:

 @model projet.Models.ViewModel
 

Ответ №2:

Вам необходимо создать модель представления:

 public class ViewModel 
{
   public List<Question> Questions { get; set; }
   public List<User> Users { get; set; }
}
 

Экшен

 public ActionResult Index()
{
   var vm = new ViewModel{
      Questions = db.Questiondb.ToList(),
      Users= db.Userdb.ToList()
   }

   return View(vm);
}
 

Вид

 @model projet.Models.ViewModel

....
<!-- Accessing Model Variables -->
@Model.Questions...
@Model.Users...