Для словаря требуется элемент модели типа 'System.Collections.Generic.IEnumerable`1 [ShimbaSchool.Models.EventMessageDepartment]' - PullRequest
0 голосов
/ 25 февраля 2019

Я испытываю ошибку при попытке извлечь данные из БД с использованием скаффолдинга списка.Ошибка и код:

Моя модель:

namespace ShimbaSchool.Models
{
    [Table("tblStaff")]
    public class Staff
    {
        [Key]
        public int StaffId { get; set; }
        [Required]
        [DisplayName("Upload Image")]
        public string ImagePath { get; set; }
        [Required,MinLength(2),DisplayName("Staff Name")]
        public string StaffName { get; set; }
        [Required,MaxLength(250)]
        [DisplayName("Teacher's Subject")]
        public string StaffSpecialty { get; set; }
        [NotMapped]
        public HttpPostedFileBase ImageFile { get; set; }

    }
}

Мой контроллер:

namespace ShimbaSchool.Controllers
{
    public class StaffController : Controller
    {
        EventMessageDepartmentContext db = new EventMessageDepartmentContext();
        public ActionResult Index()
        {
            return View(db.StaffTable.ToList());
        }
    }
}

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

@model IEnumerable<ShimbaSchool.Models.Staff>

@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_MyLayout.cshtml";
}

<h2>Index</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.ImagePath)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.StaffName)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.StaffSpecialty)
        </th>
        <th></th>
    </tr>

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.ImagePath)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.StaffName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.StaffSpecialty)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.StaffId }) |
            @Html.ActionLink("Details", "Details", new { id=item.StaffId }) |
            @Html.ActionLink("Delete", "Delete", new { id=item.StaffId })
        </td>
    </tr>
}

</table>

При выполнении я получаю сообщение об ошибке:

Элемент модели, переданный в словарь, имеет тип 'System.Collections.Generic.List 1 [ShimbaSchool.Models.Staff] ', но для этого словаря требуется элемент модели типа' System.Collections.Generic.IEnumerable 1 [ShimbaSchool.Models.EventMessageDepartment] '.

Пожалуйстапомогите мне исправить эту ситуацию и понять логику, чтобы в следующий раз не было.Чтобы добавить, я использовал ту же модель с другим контроллером, и он работал нормально, хотя представление было отображено на разных макетах одного и того же проекта.

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

На самом деле список, который вы передаете из метода контроллера для просмотра, это List of EventMessageDepartment, а не List of Staff.Пожалуйста, проверьте его правильно и передайте List of Staff из метода контроллера в представление.

Если вы уверены, что данные, которые вы передаете в представление, равны List<ShimbaSchool.Models.Staff>, тогда проверьте страницу Layout.cshtml.Может быть есть @model IEnumerable<EventMessageDepartment> ссылка.

0 голосов
/ 25 февраля 2019

Вы пробовали следующее?

    public ActionResult Index()
    {
        return View(db.StaffTable.AsEnumerable());
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...