Member 13486725 Ответов: 1

Ошибка Mvc - требуется элемент модели типа ienumerable


Я новичок как в MVC, так и в LinqToSql. Я пытаюсь создать небольшое приложение, которое перечисляет контакты, используя обе технологии.

Что я уже пробовал:

моя модель:
public class Contact
{
    [Key]
    public int Id { get; set; }
    [Required]
    public string Name { get; set; }
    [Range(18, 99)]
    public int? Age { get; set; }
    [EmailAddress]
    public string Email { get; set; }
    [Phone]
    public string Phone { get; set; }
    public Gender? Gender { get; set; }
    public string Address { get; set; }
}

public enum Gender { Male, Female }


мой контроллер:
public class ContactController : Controller
{
    private static string conStr = ConfigurationManager.ConnectionStrings["conStr"].ConnectionString;
    LinqToSqlDataContext db = new LinqToSqlDataContext(conStr);

    // GET: Contacts
    public ActionResult Index()
    {
        IList<Contact> contactList = new List<Contact>();
        var listdata = (from c in db.Contacts select c).ToList();

        foreach (var item in listdata)
        {
            contactList.Add(new Contact()
            {
                Id = item.Id,
                Name = item.Name,
                Age = item.Age,
                Email = item.Email,
                Phone = item.Phone,
                Gender = item.Gender,
                Address = item.Address
            });
        }
        return View(contactList);
    }


мой взгляд:
@model IEnumerable<ContactsApp.Models.Contact>

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

<table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.Name)
        </th>
        ...
    </tr>

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


Когда я запускаю это, я получаю следующую ошибку:
The model item passed into the dictionary is of type 'System.Collections.Generic.List`1[ContactsApp.Contact]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1[ContactsApp.Models.Contact]'.


Я был бы признателен за помощь в понимании того, что именно я делаю неправильно.
Спасибо.

j snooze

А почему у вас есть
То IList&ЛТ;контакт&ГТ; списки контактов = новый список<контакт&ГТ;();

вместо
List<contact> contactList = новый список<contact>();

?

1 Ответов

Рейтинг:
11

Dave Kreskowiak

Ну, поскольку IList реализует IEnumerable, вы должны быть хороши там.

Но на самом деле вы не читали сообщение об ошибке. Очевидно, у вас есть два разных класса контактов. однажды в пространстве имен вызывается ContactsApp а другой в пространстве имен называется ContactsApp.Models Эти два понятия не взаимозаменяемы.

Вам нужно либо изменить @model введите код Razor или измените объект, который вы добавляете в список. Конечно, я не могу сказать вам, что делать.