The model item passed into the dictionary is of type system.Data.Entity.DynamicProxies.Object_3E186F803589BF82895B10E08C 2A9AB68EFA619599418D6EB96585D14874CDC0', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1[MyApplication.Domain.Entities.Object]'.
这是我的代码:
控制器:
public ViewResult Index() { if (User.Identity.IsAuthenticated) { MembershipUser currentUser = Membership.GetUser(); Guid currentUserId = (Guid)currentUser.ProviderUserKey; if (currentUser != null && currentUser.ProviderUserKey != null && currentUser.IsApproved) { Move result = (from move in db.Moves where move.UserId == currentUserId select move).FirstOrDefault(); return View(result); } } return View(db.Moves.ToList()); }
看法:
@model IEnumerable<MovinMyStuff.Domain.Entities.Move> @{ ViewBag.Title = "Index"; } @foreach (var item in Model) { <div id="move-list-item"> <ul> <li> <span class="move-name"> @Html.DisplayFor(modelItem => item.StartCity) @Html.DisplayFor(modelItem => item.StartState) @Html.DisplayFor(modelItem => item.StartZip) - @Html.DisplayFor(modelItem => item.EndCity) @Html.DisplayFor(modelItem => item.EndState) @Html.DisplayFor(modelItem => item.EndZip) </span> </li> <li>@Html.ActionLink("Details", "Details", new { id = item.MoveId }, new { @class = "button" })</li> </ul> </div> }
这段代码:
Move result = (from move in db.Moves where move.UserId == currentUserId select move).FirstOrDefault(); return View(result);
尝试返回 单个 结果。它抱怨它想要 一系列 结果。因此,您可以使用:
var results = (from move in db.Moves where move.UserId == currentUserId select move).Take(1).ToList(); return View(results);
或者:
Move result = (from move in db.Moves where move.UserId == currentUserId select move).FirstOrDefault(); return View(new[] { result });
顺便说一下,我个人将在这里摆脱查询表达式-它使代码变得比所需的更为复杂。例如,您可以将我的第一个选项重写为:
var results = db.Moves.Where(move => move.UserId == currentUserId) .Take(1) .ToList(); return View(results);
甚至:
return View(db.Moves.Where(move => move.UserId == currentUserId) .Take(1).ToList());