Элемент модели, переданный в ViewDataDictionary, имеет тип System.Collections.Generi c .List. - PullRequest
0 голосов
/ 09 июля 2020

Элемент модели, переданный в ViewDataDictionary, имеет тип 'System.Collections.Generi c .List 1[website.Models.main]', but this ViewDataDictionary instance requires a model item of type 'System.Collections.Generic.List 1 [website.Models.List]'

Здесь я объединил четыре таблицы с помощью EF include метод. Эта ошибка возникает, когда я использую этот метод.

контроллер:

public IActionResult Index()
        {
            
            var listAll = db.main
                .Include(x => x.Person)
                .ThenInclude(x => x.Entity)
                .ThenInclude(x => x.Country)            
                .ToList();
return View(listAll);

        }

Просмотр: -

 @model List<website.Models.List>

@{
    ViewData["Title"] = "Index"; 
    }

Модели: - Я не знайте, что я здесь сделал не так, дайте мне какие-нибудь решения

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Web;
using System.Collections;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace website.Models
{
    public class List

    {
        public mainmain{ get; set; }
        public Persons Person { get; set; }
        public other other{ get; set; }
        public Entities Entity { get; set; }
        public Countries Country { get; set; }
        public int countryId { get; internal set; }
    }

    public class main
    {
        public int id{ get; set; }
        public int TypeId { get; set; }
        public int? PersonId { get; set; }
    
    }

    public class Person
    {
        public Person()
        {
            main= new HashSet<main>();
        }
        public int PersonId { get; set; }
        public string FirstNameEn { get; set; }
        public string FirstNameAr { get; set; }
        public string SecondNameAr { get; set; }
        public string HomePhonePart1 { get; set; }
        public string HomePhonePart2 { get; set; }
        public ICollection<main> main{ get; set; }
    }

    public class Other
    {
        public int PersonId { get; set; }
        public string FatherReligio { get; set; }
        public bool? Fatherless { get; set; }
        public DateTime? FatherDeathDate { get; set; }
        public bool? Motherless { get; set; }
  
     
    }

    public classEntity
    {
        public Entity()
        {
            Persons = new HashSet<Persons>();
        }
       
        public int CountryId { get; set; }
        public string Name { get; set; }
        public string ResponsibleName { get; set; }
        public string Address { get; set; }
        public string Pobox { get; set; }
        public string PhonePart1 { get; set; }
        public string PhonePart2 { get; set; }
      
        public ICollection<Persons> Persons { get; set; }
    }

    public class country
    {
        public country()

        {
           Entity = new HashSet<Entities>();
            Persons = new HashSet<Persons>();
        }
       
        public string NameEn { get; set; }
        public string NameFr { get; set; }
        public string NameSp { get; set; }
        public string NameUr { get; set; }
        public virtual ICollection<Entities> Entity { get; set; }
        public ICollection<Persons> Persons { get; set; }
    }
}

Ответы [ 2 ]

1 голос
/ 09 июля 2020

попытаться разобрать элементы в свой собственный объект List

public IActionResult Index()
{       
    var listAll = db.main
                    .Include(x => x.Person)
                    .ThenInclude(x => x.Entity)
                    .ThenInclude(x => x.Country)            
                    .ToList();
    
    List<website.Models.List> newList = new List<website.Models.List>();
    foreach(var item in listAll){
          website.Models.List listItem = new website.Models.List();
          listItem.countryId = item.countryId;
          //add your remaining fields
          newList.Add(listItem);
    }

    return View(newList);
}
0 голосов
/ 10 июля 2020

listAll - это список объекта main, вам нужно использовать соответствующий тип, чтобы добавить его на вашу страницу бритвы:

@model List<website.Models.main>

@{
    ViewData["Title"] = "Index"; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...