MVC错误-需要IEnumerable类型的模型项

时间:2019-04-19 20:28:33

标签: c# asp.net-mvc linq-to-sql ienumerable

我是MVC和LinqToSql的新手。我正在尝试创建一个列出使用这两种技术的联系人的小型应用程序。

我的模特:

$Creds = Get-Credential
enter-pssession -ComputerName 10.0.0.53 -Credential $Creds

我的控制器:

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 string conStr = ConfigurationManager.ConnectionStrings["conStr"].ConnectionString;
    private LinqToSqlDataContext db;

     public ActionResult Index()
     {
        using (db = new LinqToSqlDataContext(conStr))
        {
            var contacts = (IEnumerable)(from c in db.Contacts select c);
            return View(contacts);
        }
    }

运行此命令时,出现以下错误:

  

传递到字典中的模型项是类型   “ System.Data.Linq.DataQuery @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> 1 [ContactsApp.Models.Contact]”。

我了解View需要IEnumerable参数。我将查询转换为IEnumerable,但仍然收到错误。

希望能帮助您了解我到底在做什么错,以及解决此问题的最有效方法是什么。

1 个答案:

答案 0 :(得分:0)

问题是您的查询返回IQueryable

(from c in db.Contacts select c) // <-- returns IQueryable

您需要将其转换为List(IEnumerable

using (db = new LinqToSqlDataContext(conStr))
{
    var contacts = db.Contacts.ToList(); // <-- converts the result to List
    return View(contacts);
}