我是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,但仍然收到错误。
希望能帮助您了解我到底在做什么错,以及解决此问题的最有效方法是什么。
答案 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);
}