guruvusetty Ответов: 1

Решение для: элемент модели, переданный в словарь, имеет тип 'System.Коллекции.Generic.List`1[]', но этот словарь требует модельного элемента типа 'System.Коллекции.Общий.IEnumerable`1[]'


Всем привет,

Вот моя модель, определенная в приложении MVC4:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Collections;

namespace BindPublicationsData.Models
{
    public class Publication
    {
        public Int64 id { get; set; }
        public string title { get; set; }
        public string abstractInfo { get; set; }
        public string description { get; set; }
        public string authors { get; set; }
        public string rationale { get; set; }
        public string keyTakeways { get; set; }
        public string thumbnail { get; set; }        
    }
}



Ниже приведен класс контроллера:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace BindPublicationsData.Controllers
{
    public class PublicationController : Controller
    {       
        private KnowledgeManagerEntities db = new KnowledgeManagerEntities();

        public ActionResult Index()
        {
            var publicationsList = (from eachPub in db.KM_Publication select eachPub).ToList();
            
            return View(db.KM_Publication.ToList());
        }
    }
}


И наконец ниже приведен мой взгляд:

@model IEnumerable<BindPublicationsData.Models.Publication>

@{
    ViewBag.Title = "Index";
}

<h2>Publication</h2>

<table>
@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.title)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.description)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.abstractInfo)
        </td>        
    </tr>
}
</table>



После запуска этого приложения я получаю следующую ошибку:

Элемент модели, передаваемый в словарь, имеет тип 'System.Коллекции.Generic.List`1[BindPublicationsData.KM_Publication]', но для этого словаря требуется элемент модели типа 'System.Коллекции.Общий.IEnumerable`1[BindPublicationsData.Модели.Публикация]'.

Может ли кто-нибудь сказать мне, почему я получаю эту ошибку?

[no name]

если в контроллере вы добавляете return View(db.KM_Publication.Список());
тогда зачем нужна операция с БД, которую вы проделали выше?
Ты возвращаешься .Список тип на вид, но в целях вы воспользовались интерфейс IEnumerable

Nathan Minier

Кажется вероятным, но это не изменит ошибку.

Измените свой вид, чтобы использовать конкретный тип в качестве модели

@model List<BindPublicationsData.Модели.Публикация>

1 Ответов

Рейтинг:
10

Kornfeld Eliyahu Peter

Эта линия:

return View(db.KM_Publication.ToList());

Передает элемент списка в представление, но в представлении вы объявляете данные (модель) IEnumerable...
@model IEnumerable<bindpublicationsdata.models.publication></bindpublicationsdata.models.publication>

Вы должны изменить один из них...например
@model List<bindpublicationsdata.models.publication></bindpublicationsdata.models.publication>


Richard Deeming

Проходящий IList<T> вместо IEnumerable<T> (для совместимых параметров типа) не было бы проблемой.

В этом случае ОП пытается передать список KM_Publication объекты к чему-то, что ожидает последовательность Publication объекты.

Member 11361539

я ничего не понял из того,что было объяснено в ответах, пожалуйста, сделайте их более ясными. спасибо